当目标进程及其所有子进程退出时,是否存在等待方法?似乎Process.WaitForExit()只会等待目标进程。
答案 0 :(得分:2)
这可能会有所帮助--Windows 2000引入了“作业”的概念,这是一个被控制为ONE单元的进程集合,非常类似于UNIX / LINUX中的进程组。因此,您可以通过在作业中启动进程来杀死进程及其所有子进程,然后告诉Windows杀死作业中的所有进程。
基本上创建一个新工作,然后使用该工作生成子进程。它的所有孩子也将在新的工作中创建。超时时,只需调用job的kill()方法,整个进程树就会终止。您可以查看.NET文档以获取有关此内容的更多信息。我使用Perl的Win32 :: Job API来实现您的目标。有关详细信息,请查看MSDN上的以下链接:Job API Description
答案 1 :(得分:1)
答案 2 :(得分:0)
.net中存在一个错误,它会提供您所追求的行为。
如果您异步读取输出, WaitForExit()
将等待所有子进程。
p.StartInfo.RedirectStandardOutput = true;
p.OutputDataReceived = new DataReceivedEventHandler(OutputHandler);
p.BeginOutputReadLine();
p.BeginErrorReadLine();
WaitForExit(Int32.MaxValue-1)
允许我们在使用异步模式时获得正常行为。