
Linuxカーネルですべてのタスクのプロデューサタスクを見つけたいです。しかし、これを行う方法があるかどうかはわかりません。
real_parent
通常、ジョブのメンバーに基づいてジョブ作成者を見つけることができますstruct task_struct
。私の問題はカーネルのスレッドグループ処理にあります。
ユーザーモードのプロセス(カーネルのタスクA)がスレッド(カーネルのタスクB)を作成するとします。これを行うには、このフラグを使用してclone
システムコールをCLONE_THREAD
行います。その後、カーネルはタスクAをコピーしてタスクBを生成し、スレッドごとの初期化を実行します。そのうちのいくつかはreal_parent
Bがreal_parent
Aに設定されているということです(kernel/fork.cのコードをご覧ください。)。
したがって、親関係はタスク間ではなくスレッドグループ(つまり、ユーザーモードのプロセス)間です。スレッドグループの作業は、それらの間で階層なしで兄弟として扱われるようです。
これにより、特定のタスクがどのタスクによって生成されたかを判断する方法が不明瞭になりました。フォークされたコードを確認してメンバーを検索してみましたが、struct task_struct
何も出ませんでした。ジョブの作成者を識別する方法はありますか?