新线程的pid

我有一个关于由pthread_create()创build的新线程的简短问题:

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

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

htop显示: 显示进程列表的htop应用程序屏幕截图。

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; } 

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