GNU/Linux >> Linux の 問題 >  >> Linux

Linux はスレッドを子プロセスと区別する方法を教えてください。

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) 列が出力に追加されます。

  • Linux
    1. Linux – Linuxカーネルはユーザースペースプロセス/スレッドとカーネルタスク/ジョブの間でCPUをどのようにスケジュールしますか?

    2. Linuxでテキストファイルからバイナリを見分ける方法

    3. Linux カーネルの copy_from_user は内部でどのように機能しますか?

    1. Linuxで実行中のプロセスを強制終了する方法

    2. Linuxでプロセスとそのすべての子プロセスのCPU使用率を計算する方法は?

    3. Linux のトップ画面から一部のユーザーを除外するには?

    1. Linux – Linuxからブートローダーを実行する方法は?

    2. スレッドは Linux でプロセスとして実装されますか?

    3. Linux はどのようにプロセス間で帯域幅を割り当てますか?