PID和TID之间的区别

时间:2010-12-23 09:15:42

标签: linux pid

PID和TID有什么区别?

标准答案是PID用于进程,而TID用于线程。但是,我已经看到一些命令可以互换使用它们。例如,htop有一个PID列,其中显示了相同进程的线程的PID(具有不同的值)。那么PID什么时候代表一个线程或一个进程?

4 个答案:

答案 0 :(得分:80)

很复杂: pid 是进程标识符; tid 是线程标识符。

但实际上,内核并没有真正区分它们:线程就像进程一样,但是它们与同一个组的其他实例共享一些东西(内存,fds ......)

因此, tid 实际上是内核(线程)中可调度对象的标识符,而 pid 是共享的可调度对象组的标识符记忆和fds(过程)。

但是为了让事情变得更有趣,当一个进程只有一个线程(初始情况和旧时代唯一的一个)时, pid tid 总是一样的。因此,任何与 tid 一起使用的函数都将自动使用 pid

值得注意的是,许多记录使用 pid 的函数/系统调用/命令行实用程序实际上使用 tids 。但如果效果是整个过程,你根本就不会注意到差异。

答案 1 :(得分:3)

实际上,Linux进程中的每个线程都是轻量级进程(LWP)。所以,人们可能会将线程称为一个过程......但肯定存在差异。 进程中的每个线程都有不同的线程ID(TID)并共享相同的进程ID(PID)。

如果您正在使用pthread库函数,那么这些函数不使用这些TID,因为它们是内核/操作系统级别的线程ID。

答案 2 :(得分:2)

根据man gettid

添加其他答案
  

此调用返回的线程ID与POSIX线程ID(即pthread_self(3)返回的不透明值)不同。

因此,TID可能意味着两件不同的事情!

答案 3 :(得分:0)

pid和tid是相同的,除非创建进程时调用clone CLONE_THREAD(根据gettid的手册页)。在这种情况下,您将获得唯一的线程ID,但属于同一线程组的所有线程共享相同的进程ID。

但是,我还记得阅读(虽然我找不到来源)可以缓存从getpid返回的值。

[UPDATE] 有关缓存NOTES的影响的讨论,请参阅pids部分here

相关问题