如何等待进程及其所有子进程退出?

时间:2011-11-21 06:18:47

标签: c#

当目标进程及其所有子进程退出时,是否存在等待方法?似乎Process.WaitForExit()只会等待目标进程。

3 个答案:

答案 0 :(得分:2)

这可能会有所帮助--Windows 2000引入了“作业”的概念,这是一个被控制为ONE单元的进程集合,非常类似于UNIX / LINUX中的进程组。因此,您可以通过在作业中启动进程来杀死进程及其所有子进程,然后告诉Windows杀死作业中的所有进程。

基本上创建一个新工作,然后使用该工作生成子进程。它的所有孩子也将在新的工作中创建。超时时,只需调用job的kill()方法,整个进程树就会终止。您可以查看.NET文档以获取有关此内容的更多信息。我使用Perl的Win32 :: Job API来实现您的目标。有关详细信息,请查看MSDN上的以下链接:Job API Description

答案 1 :(得分:1)

this问题的答案显示了如何递归地杀死进程的所有子进程。您可以等待每个子进程直到完成,而不是杀死它。您可以使用this问题中描述的Process.Exited事件,该事件看起来与此问题重复。

答案 2 :(得分:0)

.net中存在一个错误,它会提供您所追求的行为。

如果您异步读取输出,

WaitForExit()将等待所有子进程。

p.StartInfo.RedirectStandardOutput = true;
p.OutputDataReceived = new DataReceivedEventHandler(OutputHandler);
p.BeginOutputReadLine();
p.BeginErrorReadLine();

WaitForExit(Int32.MaxValue-1)允许我们在使用异步模式时获得正常行为。