linux syscall系统调用获取线程PID.doc
《linux syscall系统调用获取线程PID.doc》由会员分享,可在线阅读,更多相关《linux syscall系统调用获取线程PID.doc(2页珍藏版)》请在三一文库上搜索。
1、linux syscall系统调用获取线程PIDLinux中,每个进程有一个pid,类型pid_t,由getpid()取得。Linux下的POSIX线程也有一个id,类型 pthread_t,由pthread_self()取得,该id由线程库维护,其id空间是各个进程独立的(即不同进程中的线程可能有相同的id)。Linux中的POSIX线程库实现的线程其实也是一个进程(LWP),只是该进程与主进程(启动线程的进程)共享一些资源而已,比如代码段,数据段等。通过pthread_self()取得的线程id实际上是当前线程的descriptor地址,其实现:# define THREAD_SELF (
2、 struct pthread *_self; asm (movl %gs:%c1,%0 : =r (_self) : i (offsetof (struct pthread, header.self); _self;)但有时候我们可能需要知道线程的真实pid。比如进程P1要向另外一个进程P2中的某个线程发送信号时,既不能使用P2的pid,更不能使用线程的pthread id,而只能使用该线程的真实pid,称为tid。 有一个函数getTId()可以得到TId,但glibc并没有实现该函数,只能通过Linux的系统调用syscall来获取。syscall 系统调用获取pidlinux 2.6.
3、18版本之前的内核,在include/asm-i386/unistd.h文件中定义有7个_syscall宏,分别是:_syscall0(type,name) _syscall1(type,name,type1,arg1) _syscall2(type,name,type1,arg1,type2,arg2) _syscall3(type,name,type1,arg1,type2,arg2,type3,arg3) _syscall4(type,name,type1,arg1,type2,arg2,type3,arg3,type4,arg4) _syscall5(type,name,type1,a
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux syscall系统调用获取线程PID syscall 系统 调用 获取 线程 PID
链接地址:https://www.31doc.com/p-3255195.html