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
として使用できます) 同様に) 以下のように分類されます:
e
ps
に伝えます 所有者や現在のステータス (アクティブ、スリープ、一時停止、I/O 待機中など) に関係なく、すべてのプロセスを表示します。L
ps
に伝えます 個々のスレッドを表示するf
ps
に伝えます 出力を完全な形式のリストとしてフォーマットし、L
と組み合わせて 引数 NLWP (スレッド数) および LWP (スレッド ID) 列が出力に追加されます。