Process
程序 pstree 和 htop 顯示具有唯一 PIDS 的執行緒。這怎麼可能?
我執行程序 pstree -p 31872 列印以下輸出:
ruby(31872)─┬─{ruby}(31906) └─{ruby}(32372)
pstree 的手冊頁說:
程序的子執行緒位於父程序下,並以大括號中的程序名稱顯示,例如
icecast2---13*[{icecast2}]
(上面的顯示不同,因為缺少 -p 選項,它禁用了壓縮。)
在沒有 -p 的情況下執行 pstree 31872 會給出:
ruby───2*[{ruby}]
當我嘗試使用ps觀察這些 PIDS時,沒有找到任何結果。但是,pid 存在於 /proc 中。
我的問題是,為什麼執行緒會有不同的 pid?我希望它們與過程相同(31872)。執行 htop 時觀察到相同的行為。
錯誤是假定這些數字是 PIDS,而實際上它們是 TIDS(執行緒 ID)。請參閱 Linux 函式 gettid(2)。閱讀 clone(2) 提供了許多額外的(和有趣的)細節。
執行緒通常是不同的程序。至少在 Linux 中,“執行緒”通常是程序的複製,恰好與父程序共享一些記憶體。
但是,在某些語言中,執行緒確實保留在主程序中,因為它們是“綠色”執行緒,在語言 VM 中模擬。Java和python因此而聞名。