Linuxはスレッドとサブプロセスをどのように区別しますか?

Linuxはスレッドとサブプロセスをどのように区別しますか?

Linuxは実際にプロセスとスレッドを区別しませんが、両方をデータ構造として実装しますtask_struct

それでは、Linuxはスレッドとプロセスのサブプロセスを区別するために特定のプログラムに何を提供しますか?例えば、Linuxでプロセスが所有するすべてのスレッドの詳細を表示する方法はありますか?

ありがとうございます。

ベストアンサー1

観点からtask_struct見ると、プロセスのスレッドは同じスレッドグループリーダー(group_leader存在するtask_struct)、子プロセスには異なるスレッドグループリーダー(それぞれ別々の子プロセス)があります。

この情報はユーザー空間に公開されます。渡すファイル/procシステムorのフィールドを見ると親と子をppid追跡できます(これは親pidを提供します)、orのフィールドを見るとスレッドを追跡できます(これはグループリーダーのPIDでもあるスレッドグループIDを提供します)。プロセスのスレッドはディレクトリに表示されます。各スレッドには独自のサブディレクトリがあります。 (各プロセスには少なくとも1つのスレッドがあります。)/proc/${pid}/stat.../statustgid.../status/proc/${pid}/task

実際に追跡したいプログラムは彼らだけのスレッドオペレーティングシステム固有の情報を使用する代わりに、使用しているスレッドライブラリによって提供されるAPIに依存します。一般に、Unixファミリーシステムではpthreadを使用することを意味します。

おすすめ記事