程序 pstree 和 htop 显示具有唯一 PIDS 的线程。这怎么可能?

sta*_*ona 7 process ps thread htop

我运行了程序 pstree -p 31872 ,它打印了以下输出:

 ruby(31872)???{ruby}(31906)         
             ??{ruby}(32372)
Run Code Online (Sandbox Code Playgroud)

pstree 的手册页说:

进程的子线程位于父进程下,并用花括号中的进程名称显示,例如

       icecast2---13*[{icecast2}]
Run Code Online (Sandbox Code Playgroud)

(以上显示不同,因为缺少 -p 选项,禁用压缩。)

在没有 -p 的情况下运行 pstree 31872 给出:

ruby???2*[{ruby}] 
Run Code Online (Sandbox Code Playgroud)

当我尝试使用ps观察那些 PIDS 时,没有找到任何结果。但是,pid 存在于 /proc 中。

我的问题是,为什么线程会有不同的 pid?我希望它们与过程相同(31872)。运行 htop 时观察到相同的行为。

sta*_*ona 9

错误是假设这些数字是 PIDS,而实际上它们是 TIDS(线程 ID)。请参阅 Linux 函数 gettid(2)。阅读 clone(2) 提供了许多额外(和有趣)的细节。