タスク:親プロセスが終了した場合、すべての子プロセスを自動的に強制終了します。親プロセスは、正しい方法だけでなく、たとえば ProcessExplorer で強制終了することによっても終了できます。どうすればいいですか?
Job オブジェクトを使用するためのСtopicのアドバイスの同様の質問。外部DLLをエクスポートせずにC#で使用するには?
ジョブ オブジェクトを使用しようとしました。しかし、このコードは正しく動作しません:
var job = PInvoke.CreateJobObject(null, null);
var jobli = new PInvoke.JOBOBJECT_BASIC_LIMIT_INFORMATION();
jobli.LimitFlags = PInvoke.LimitFlags.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_PRIORITY_CLASS
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_TIME
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_DIE_ON_UNHANDLED_EXCEPTION
| PInvoke.LimitFlags.JOB_OBJECT_LIMIT_JOB_MEMORY;
var res = PInvoke.SetInformationJobObject(job, PInvoke.JOBOBJECTINFOCLASS.JobObjectBasicLimitInformation, jobli, 48);
if (!res)
{
int b = PInvoke.GetLastError();
Console.WriteLine("Error " + b);
}
var Prc = Process.Start(...);
PInvoke.AssignProcessToJobObject(job, Prc.Handle);
PInvoke.SetInformationJobObject がエラーを返します。GetLastError はエラー 24 を返します。ただし、PInvoke.AssignProcessToJobObject は機能し、子プロセスがジョブ キューに追加されます (ProcessExplorer で確認できます)。しかし、 PInvoke.SetInformationJobObject が機能しないため、親プロセスを強制終了しても、生成されたプロセスは存続します。
このコードの何が間違っていますか?