task_struct から 観点から見ると、プロセスのスレッドには同じスレッド グループ リーダー (group_leader) があります。 task_struct で )、子プロセスには異なるスレッド グループ リーダーがあります(個々の子プロセスごとに)。
この情報は 経由でユーザー空間に公開されます /proc ファイルシステム。 ppid を見ると、親と子を追跡できます。 /proc/${pid}/stat のフィールド または .../status (これにより、親 pid が得られます); tgid を見ることでスレッドを追跡できます .../status のフィールド (これにより、グループ リーダーの pid でもあるスレッド グループ ID が得られます)。プロセスのスレッドは /proc/${pid}/task で可視化されます directory:各スレッドは独自のサブディレクトリを取得します。 (すべてのプロセスには少なくとも 1 つのスレッドがあります。)
実際には、独自のスレッドを追跡したいプログラム OS 固有の情報を使用する代わりに、使用しているスレッド ライブラリによって提供される API に依存します。通常、pthreads を使用することを意味する Unix ライクなシステムで。
<オール>
これは top を実行します いくつかの追加オプションを含むコマンド:
top -H -b -n 1
-H引数は、個々のスレッドを表示するよう top に指示します。通常、top は親プロセスの下にあるすべてのスレッドを要約します。-b引数は top をバッチ モードで実行します。インタラクティブ モードで実行して表示データを更新するのではなく、情報を収集して表示し、標準出力にダンプします。-bで オプションの場合、ユーザーは top に実行回数を指定する必要があります。これは-nで行われます 引数と実行回数を指定した最終引数
だから top -H -b -n 1 システムに「トップを実行し、個々のスレッドを表示し、バッチ モードで実行し、1 回だけ実行する」ように指示します。
ps コマンドは、現在実行中のプロセスのスナップショットを報告します。
ps -eLf
-eLf 引数 (-e -L -f として使用できます) 同様に) 以下のように分類されます:
epsに伝えます 所有者や現在のステータス (アクティブ、スリープ、一時停止、I/O 待機中など) に関係なく、すべてのプロセスを表示します。Lpsに伝えます 個々のスレッドを表示するfpsに伝えます 出力を完全な形式のリストとしてフォーマットし、Lと組み合わせて 引数 NLWP (スレッド数) および LWP (スレッド ID) 列が出力に追加されます。