15

我有一个关于 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 显示: 显示进程列表的 htop 应用程序的屏幕截图。

4

2 回答 2

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;
}
于 2012-05-11T09:05:31.390 回答
2

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

于 2012-05-11T00:03:53.363 回答