Linuxは実際にはプロセスとスレッドを区別せず、両方をデータ構造として実装しますtask_struct。
Linuxは、子プロセスからプロセスのスレッドを伝えるために、いくつかのプログラムに何を提供しますか?たとえば、Linuxでプロセスが持つすべてのスレッドの詳細を表示する方法はありますか?
ありがとう。
Linuxは実際にはプロセスとスレッドを区別せず、両方をデータ構造として実装しますtask_struct。
Linuxは、子プロセスからプロセスのスレッドを伝えるために、いくつかのプログラムに何を提供しますか?たとえば、Linuxでプロセスが持つすべてのスレッドの詳細を表示する方法はありますか?
ありがとう。
回答:
task_struct観点から見ると、プロセスのスレッドには同じスレッドグループリーダー(group_leaderintask_struct)がありますが、子プロセスには異なるスレッドグループリーダー(各子プロセス)があります。
この情報は、ファイルシステムを介してユーザー空間に公開されます/proc。または(親pidを与える)のppidフィールドを見ることで、親と子を追跡できます。のフィールドを見てスレッドをトレースできます(これにより、グループリーダーのpidでもあるスレッドグループIDが得られます)。プロセスのスレッドはディレクトリに表示されます。各スレッドは独自のサブディレクトリを取得します。(すべてのプロセスには少なくとも1つのスレッドがあります。)/proc/${pid}/stat.../statustgid.../status/proc/${pid}/task
実際には、独自のスレッドを追跡したいプログラムは、OS固有の情報を使用する代わりに、使用しているスレッドライブラリによって提供されるAPIに依存します。通常、Unixのようなシステムでは、pthreadを使用することを意味します。
(sleep 120 | sleep 120) &して確認し ます。Tgidsleep/proc/${pid}/status
これによりtop、いくつかの追加オプションを指定してコマンドが実行されます。
top -H -b -n 1
-H引数には、個々のスレッドを表示するには、トップを指示します。通常topは、親プロセスの下のすべてのスレッドを要約します。-b引数はバッチモードでトップ走行を作る-情報が収集され、表示され、その後、対話モードで実行されていると表示されたデータをリフレッシュするとは対照的に、標準出力にダンプ。-bオプションを使用すると、ユーザーはtopに実行回数を伝える必要があります。これは、-n引数と最後の引数に実行回数を指定して行われます。したがってtop -H -b -n 1、システムに「トップを実行し、個々のスレッドを表示し、バッチモードで実行し、1回だけ実行する」ように指示します。
このpsコマンドは、現在実行中のプロセスのスナップショットを報告します。
ps -eLf
-eLf引数は、(として使用することができ-e -L -f、次のように同様に)破壊します:
eps所有者や現在のステータス(アクティブ、スリープ、一時停止、I / Oの待機など)に関係なく、すべてのプロセスを表示するように指示します。Lps個々のスレッドを表示するように指示しますfように指示psし、L引数とともにNLWP(スレッドの数)列とLWP(スレッドID)列が出力に追加されます。 PID p1のプロセスを考えます
task_struct子プロセスのオブジェクトのPPID(親PID)はp1であり、そのPIDとTGIDは、たとえばp2に設定されます。
task_structp1のスレッドのオブジェクトのPIDは、たとえばp3に設定されますが、TGIDはp1に設定されます。