PID和TID有什么区别?
标准答案是PID用于进程,而TID用于线程。但是,我已经看到一些命令可以互换地使用它们。例如,htop有一个PID列,其中显示了同一进程的线程的PID(具有不同的值)。那么,PID何时表示线程或进程呢?
发布于 2012-01-09 19:43:59
它很复杂: pid是进程标识符;tid是线程标识符。
但碰巧的是,内核并没有真正区分它们:线程就像进程一样,但它们共享一些东西(内存、磁盘...)与同一组的其他实例。
因此,tid实际上是内核(线程)中可调度对象的标识符,而pid是共享内存和fds (进程)的可调度对象组的标识符。
但是让事情更有趣的是,当一个进程只有一个线程时(最初的情况,在过去的好时光中是唯一的),pid和tid总是相同的。因此,任何使用tid的函数都将自动使用pid。
值得注意的是,许多记录为使用pid的函数/系统调用/命令行实用程序实际上使用了tid。但是,如果影响是全过程的,您将根本不会注意到差异。
发布于 2012-01-09 19:13:59
实际上,Linux进程中的每个线程都是轻量级进程(LWP)。因此,人们可能会将线程称为进程...但这肯定是有区别的。进程中的每个线程具有不同的线程ID (TID),并共享相同的进程ID (PID)。
如果您正在使用pthread库函数,那么这些函数就不会使用这些TID,因为它们是内核/操作系统级别的线程ID。
发布于 2016-05-07 21:18:55
根据man gettid的说法,只是为了补充其他答案
此调用返回的线程ID与POSIX线程ID不同(即,pthread_self(3)返回的不透明值)。
因此,TID有两种不同的含义!
https://stackoverflow.com/questions/4517301
复制相似问题