日期:2014-05-16  浏览次数:20657 次

linux系统下,线程ID和进程ID有没有对映关系
本帖最后由 heyetina 于 2011-07-24 21:52:48 编辑
通过程序获得进程ID,不生成线程时共7个线程,在测试多线程程序时,第一个线程ID=进程ID+8;,貌似找到了对应关系。但是运用到复杂程序下,通过servlet测试,进程ID和线程ID就没有了一致的对应关系。

后来查资料发现,好像是因为tomcat采用了线程池技术,随机抽调线程执行请求,所以没有多线程测试程序显示出的关系

想请问大牛们,这种情况下怎么能获得执行请求的线程ID呢?
------解决方案--------------------
ps -eflLf 
------解决方案--------------------
grep 程序名称
------解决方案--------------------
在linuxthreads时代,线程称为轻量级进程(LWP),也就是每个线程就是个进程,每个线程(进程)ID不同;

自从2.4.10后,采用NPTL(Native Posix Thread Library)的线程库, 各个线程同样是通过fork实现的,并且具备同一个父进程,但getpid是获取父进程的ID,而不是线程(子进程)的ID。

至于LZ的问题,线程ID与进程ID关系,pthread_t是依赖于系统的,可以是个int或uint或结构体指针,因此跟进程ID没有任何关系,甚至无法预知其数据类型,所以提供了pthread_equal的API来比较两个线程是否是同一个。

参考资料:http://www.ibm.com/developerworks/cn/linux/l-threading.html
         http://bbs.unixbeta.com/archiver/tid-39501.html