PID和TID之间的区别

apo*_*020 60 linux pid

PID和TID有什么区别?

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

rod*_*igo 87

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

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

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

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

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

  • 并且使它更有趣:在源代码中还出现名称*tgid*(线程组标识符) - 您已经可以猜测它与*pid*同义. (13认同)
  • gettid()中的* tid *与pthread_t * tid *不同,请参阅`man gettid` (2认同)

san*_*eep 5

实际上,Linux 进程中的每个线程都是轻量级进程(LWP)。因此,人们可能将线程称为进程……但肯定是有区别的。进程中的每个线程都有不同的线程ID(TID)并共享相同的进程ID(PID)。

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