プロセスや軽量プロセスについてtgidとpidが異なりますか?

プロセスや軽量プロセスについてtgidとpidが異なりますか?

すべてのプロセスまたは軽量プロセスの場合、tgidとpidは同じ概念です。

/proc/${pid}/statustgidとpidは別のフィールドです。プロセスや軽量プロセスについてtgidとpidが異なりますか?

ありがとうございます。

ベストアンサー1

ビュー/proc/${pid}/statusTgid:フィールドPid:は、プロセスまたはプロセスの基本スレッドと同じであるため、常に一致します。

2つの別々のフィールドがあるのは、同じコードを使用してフィールドを生成するためです/proc/${pid}/task/${tid}/status。ここTgid:で、とはPid:異なる場合があります。 (より具体的には、上記で使用したファイル名テンプレート内でTgid:一致し、一致します。)${pid}Pid:${tid}


命名は少し混乱しています。主にスレッドサポートが後でLinuxカーネルに追加され、スケジューラコードがその時点でプロセスをスケジューリングするために使用されたロジックを再利用するように変更されたため、スレッドをスケジューリングできるためです。これにより、個々のスレッドを識別するために「pid」の概念を再利用しました。したがって、実際にカーネルの観点から見ると、「pid」はまだスレッドに使用され、「tgid」はプロセスに導入されました。ただし、ユーザースペースではまだPIDがプロセスを識別したいので、ユーザースペースユーティリティ(などps)はカーネルの「tgid」をPIDにマッピングし、カーネルの「pid」を「tid」(スレッドID)にマップします。 。

おすすめ記事