任務:如果父進程終止,自動終止所有子進程。例如,父進程不僅可以以正確的方式終止,還可以在ProcessExplorer中終止。 我該怎麼辦?父進程在C#中終止時如何終止子進程
類似的問題在С topic建議使用Job對象。如何在C#中使用它,而無需導出外部DLL?
我試圖使用作業對象。但是這個代碼不正常:
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不起作用 - 當我殺掉父親時,衍生的過程保持活躍狀態。
我在這段代碼中有什麼不正確的地方?
另一個問題的答案似乎對我很好,只是從kernel32中調用函數。 http://www.pinvoke.net/default.aspx/kernel32.assignprocesstojobobject – 2010-07-13 08:14:46