カーネルはどのような「スレッド」/プロセスがプロセスに関連付けられているかどうかをどうやって知ることができますか? [コピー]

カーネルはどのような「スレッド」/プロセスがプロセスに関連付けられているかどうかをどうやって知ることができますか? [コピー]

私が読んだように、Linuxでは「スレッド」は単なるプロセスです。

プロセスが2つの「スレッド」を生成すると仮定します。プロセスが終了すると、そのプロセスに関連する2つの「スレッド」/プロセスも終了します。

プロセス(プロセスを作成した)に関連する「スレッド」/プロセスに関する情報はどこに保存されていますか?

ベストアンサー1

情報はメモリに保存されます。作業構造は次のとおりです。task_struct各プロセス/スレッドに関連付けられます。これらすべての情報は、後述の/procように通常どおり擬似ファイルシステムに提供されます。man 5 proc

プロセスが終了して消えると、カーネルはメモリ内のプロセスに関連するスレッドのリストを分析して/proc/[pid]/task/終了します。

Linuxのプロセス/スレッド表現モデルは、プロセスとスレッドをあまり分離しないため、両方とも作業です。たとえば、/proc/組織に表示されているのと同じ作業名前空間を共有します。PID(プロセスID)またはtid(スレッドID)は同じです。しかし、違いがあります。getpid()スレッドを返しますPID、しかしゲテッド() はスレッドの値を返します。tid。スレッドが呼び出されたときに異なる値を返すことができます。

質問に関して、対応する疑似ファイルは次にマップされますか?作業構造コンテンツ:

  • /proc/[pid]/task/

    これは、プロセスの各スレッドのサブディレクトリを含むディレクトリです。各サブディレクトリの名前は、スレッドの数値スレッドID([tid])です(gettid(2)を参照)。各サブディレクトリには、/proc/[pid]ディレクトリと同じ名前と内容を持つファイルセットがあります。すべてのスレッドが共有する属性の場合、task / [tid]サブディレクトリ内の各ファイルの内容は、親/ proc / [pid]ディレクトリ内の対応するファイルの内容と同じです(例:マルチスレッドプロセス)。プロセス内のすべてのスレッドが作業ディレクトリを共有するため、[tid] / cwdファイルは親ディレクトリの/ proc / [pid] / cwdファイルと同じ値を持ちます。ジョブ/[tid]の下の対応するファイルは、スレッドごとに異なる属性に対して異なる値を持つことができます(例えば、ジョブ/[tid]/状態ファイルの個々のフィールドはスレッドごとに異なる場合があります)。他の価値。 /proc/[pid]にはまったく存在しません。マルチスレッドプロセスで基本スレッドが終了すると(通常はpthread_exit(3)呼び出しを介して)、/proc/[pid]/taskディレクトリの内容は使用できません。

  • /proc/[pid]/status

    Tgid:スレッドグループID(つまり、プロセスID)。

    この擬似ファイルにはtgidアイテム、プロセスのすべてのスレッドは同じ値(またはtid~のPID)。

man 7 pthreads詳細は現在の説明で確認できます。NPTL 実装する

おすすめ記事