pstree -p 31872 プログラムを実行し、次の出力が印刷されました。
ruby(31872)─┬─{ruby}(31906)
└─{ruby}(32372)
pstreeのマニュアルページには次のように記載されています。
プロセスのサブスレッドは、中かっこ内に示されているプロセス名を持つ親プロセスの下にあります。
icecast2---13*[{icecast2}]
(上記の表示は圧縮を無効にする-pオプションがないため異なります。)
-p なしで pstree 31872 を実行すると、次のようになります。
ruby───2*[{ruby}]
次のコマンドを使用してPIDSを観察しようとするとメモ、検索結果がありません。ただし、pidは/ procに存在します。
私の質問は、スレッドのPIDがなぜ異なるのですか?私は彼らがプロセス(31872)と同じであることを望みます。 htopを実行しても同じ動作が観察されます。
答え1
間違いは、この数字は実際にはTIDS(スレッドID)ですが、PIDSと仮定することです。 Linux 関数 gettid(2) を参照してください。多くの追加(そして興味深い)詳細については、clone(2)を読んでください。
答え2
スレッドは通常別のプロセスです。少なくともLinuxでは、「スレッド」は通常、親プロセスといくつかのメモリを共有するプロセスのレプリカです。
ただし、一部の言語では、スレッドは言語VMでエミュレートされる「緑」スレッドであるため、基本プロセスの一部として残ります。 JavaとPythonはこれで有名です。