Linuxは実際にプロセスとスレッドを区別しませんが、両方をデータ構造として実装しますtask_struct
。
それでは、Linuxはスレッドとプロセスのサブプロセスを区別するために特定のプログラムに何を提供しますか?例えば、Linuxでプロセスが所有するすべてのスレッドの詳細を表示する方法はありますか?
ありがとうございます。
ベストアンサー1
観点からtask_struct
見ると、プロセスのスレッドは同じスレッドグループリーダー(group_leader
存在するtask_struct
)、子プロセスには異なるスレッドグループリーダー(それぞれ別々の子プロセス)があります。
この情報はユーザー空間に公開されます。渡すファイル/proc
システムorのフィールドを見ると親と子をppid
追跡できます(これは親pidを提供します)、orのフィールドを見るとスレッドを追跡できます(これはグループリーダーのPIDでもあるスレッドグループIDを提供します)。プロセスのスレッドはディレクトリに表示されます。各スレッドには独自のサブディレクトリがあります。 (各プロセスには少なくとも1つのスレッドがあります。)/proc/${pid}/stat
.../status
tgid
.../status
/proc/${pid}/task
実際に追跡したいプログラムは彼らだけのスレッドオペレーティングシステム固有の情報を使用する代わりに、使用しているスレッドライブラリによって提供されるAPIに依存します。一般に、Unixファミリーシステムではpthreadを使用することを意味します。