【发布时间】:2014-04-14 15:18:42
【问题描述】:
以Process.Start(exepath); 开头的程序会在父进程结束时终止吗?我遇到了一些奇怪的行为,我认为这可能是问题所在。
【问题讨论】:
标签: c# .net process process.start
以Process.Start(exepath); 开头的程序会在父进程结束时终止吗?我遇到了一些奇怪的行为,我认为这可能是问题所在。
【问题讨论】:
标签: c# .net process process.start
您的问题的简短回答是不,他们没有。你必须明确地杀死它们。如果你想杀死你已经启动的进程,那么你可以使用 process.start 返回的句柄。像这样的
Process p = Process.Start("someprocess");
if (p != null)
p.Kill();
【讨论】:
在 Windows 上,子进程通常独立存在,一旦启动,它们就不再依赖于它们的父进程。您正在寻找job objects。通过作业,您可以控制整个进程树的生命周期,如果父进程结束,所有子进程都可以确定性地终止(通过让父进程拥有作业,严格来说,如果作业被终止,所有子进程都会终止)。它没有托管的 .Net API,但 p-Invoke 工作正常。
因此,如果您遇到意外的“奇怪行为”,请确保您的进程未在作业上下文中启动,从而导致您的子进程也成为作业的一部分。 Process Explorer 可以显示进程的作业属性。
【讨论】: