当父节点终止时,Process.Start是否终止子程序?

时间:2014-03-11 06:55:37

标签: c# .net process process.start

当父进程结束时,以Process.Start(exepath);启动的程序是否会终止?我对它有一些奇怪的行为,并认为这可能是问题所在。

2 个答案:

答案 0 :(得分:6)

在Windows上,子进程通常独立存在,一旦启动,它们就不依赖于父进程。您正在寻找job objects。对于可以控制整个进程树生存期的作业,如果父进程结束,则可以确定性地终止所有子进程(通过让父进程拥有该作业,严格地说,如果作业被终止,则所有子进程都终止)。没有托管的.Net API,但p-Invoke工作正常。

因此,如果您遇到意外的“奇怪行为”,请确保您的流程不会在作业的上下文中启动,从而导致您的子流程也成为工作的一部分。 Process Explorer可以显示流程的作业属性。

答案 1 :(得分:1)

对你的问题的简短回答是否定的,他们没有。你必须明确地杀死它们。如果你想杀死你已经开始的进程,那么你可以使用process.start返回的句柄。像这样的东西

Process p = Process.Start("someprocess");
if (p != null)
  p.Kill();