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

本文关键字:子进程 退出 进程 何等待 等待 | 更新日期: 2023-09-27 18:15:27

是否存在等待方法,该方法将在目标进程及其所有子进程退出时返回?似乎process. waitforexit()只会等待一个目标进程。

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

.net中有一个bug,会给你想要的行为。

WaitForExit()将等待所有子进程,如果您正在异步读取输出。

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

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

这可能会有所帮助- Windows 2000引入了"作业"的概念,它是作为一个单元控制的进程集合,就像UNIX/LINUX中的进程组一样。因此,您可以通过在作业中启动进程来杀死进程及其所有子进程,然后告诉Windows杀死该作业中的所有进程。

基本上创建一个新作业,然后使用该作业生成子进程。它的所有子节点也将在新的Job中创建。当超时时,只需调用作业的kill()方法,整个进程树将被终止。您可以查看. net文档以了解更多相关信息。我使用Perl的Win32::Job API来实现您正在尝试做的事情。查看MSDN上的以下链接获取更多信息:Job API Description

这个问题的答案显示了如何递归地终止进程的所有子进程。您可以等待每个子进程直到它完成,而不是终止它。你可以使用Process。