pid为新线程

时间:2012-05-10 23:59:07

标签: c linux pthreads

我有一个关于pthread_create()创建的新线程的快速问题:

当我打印主线程和子线程的pid(来自getpid())时,它们是相同的,而当我使用htop linux实用程序来显示pid时,它们是不同的。任何人都可以向我解释一下吗?谢谢!

kai@kai-T420s:~/LPI$ ./pthr_create
--------------------------------------
main thread: pid: 4845, ppid: 3335
child thread: pid: 4845, ppid: 3335

htop显示: Screenshot of the htop application showing a list of processes.

2 个答案:

答案 0 :(得分:20)

Linux将pthreads()实现为轻量级进程,因此它们获得了PID分配。

可在http://www.linuxforu.com/2011/08/light-weight-processes-dissecting-linux-threads/

找到更多信息

还有一个如何为你的线程获取LWP-Pid的例子。

#include <stdio.h>
#include <syscall.h>
#include <pthread.h>

int main()
{
     pthread_t tid = pthread_self();
     int sid = syscall(SYS_gettid);
     printf("LWP id is %d\n", sid);
     printf("POSIX thread id is %d\n", tid);
     return 0;
}

答案 1 :(得分:2)

线程既有getpid()系统调用返回的进程ID,也有gettid()返回的线程ID。对于在main()下执行的线程,这些将是相同的。我不知道哪个htop正在报告,你应该查看文档。