上に示したように、ジョブオブジェクトルートを使用することをお勧めします。これが最も信頼性が高くなります。
ジョブオブジェクトルートに移動できない場合は、toolhelp APIを使用して親プロセスIDを取得し、その方法でツリーを構築できます。ただし、Windowsには強い親子関係がなく、PIDがリサイクルされる可能性があるため、注意が必要です。を使用GetProcessTimes
して、プロセスの作成時刻を照会し、それが子よりも古いことを確認できます。ツリーの中間プロセスが終了すると、ツリーをそれ以上歩くことができなくなります。
// Error handling removed for brevity
HANDLE snapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
PROCESSENTRY32 process;
ZeroMemory(&process, sizeof(process));
process.dwSize = sizeof(process);
Process32First(snapshot, &process);
do
{
// process.th32ProcessId is the PID.
// process.th32ParentProcessID is the parent PID.
} while (Process32Next(snapshot, &process));