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

5
使用Process.Start(exepath);启动的程序会在父进程结束时终止吗?我使用它时出现了一些奇怪的行为,我认为这可能是问题所在。
2个回答

6
在Windows上,子进程通常独立存在,一旦启动就不依赖于其父进程。您需要寻找作业对象。使用作业对象,您可以控制整个进程树的生命周期,如果父进程结束(通过使父进程拥有该作业,严格来说,如果杀死该作业,则所有子进程终止),则可以确定地终止所有子进程。没有托管的.Net API可用,但是p-Invoke很好用。
因此,如果您遇到意外的“奇怪行为”,请确保您的进程未在作业上下文中启动,从而导致您的子进程也成为作业的一部分。Process Explorer可以显示进程的作业属性。

感谢您详细的回复,但我认为您对我的问题过于深入了解。我只是想知道这个进程是否会死亡 - 因为我看到的问题是子进程在父进程结束后就会结束。结果问题完全不同。 - Christian Stewart
@ChristianStewart,你还记得你的问题是什么吗?我看到了类似的行为,但也很奇怪——如果进程在我的开发文件夹中,它可以正常工作。但是在一个打包成MSI并安装的应用程序中,杀死父进程会导致子进程被终止。有没有可能这就是你遇到的问题? - Dave
很抱歉,@Dave,我不会了,我已经不再使用C#了 :) 祝你好运! - Christian Stewart

1
您的问题的简短回答是“不”,它们不会自动终止。如果您想要终止您启动的进程,则可以使用process.start返回的句柄。类似这样:
Process p = Process.Start("someprocess");
if (p != null)
  p.Kill();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接