【问题标题】:Does Process.Start terminate the child program when the parent terminates?父程序终止时 Process.Start 是否终止子程序?
【发布时间】:2014-04-14 15:18:42
【问题描述】:

Process.Start(exepath); 开头的程序会在父进程结束时终止吗?我遇到了一些奇怪的行为,我认为这可能是问题所在。

【问题讨论】:

    标签: c# .net process process.start


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的详细回复,但我认为您对我的问题的解读太过分了。我只是想知道该进程是否会死 - 因为我看到的问题是一旦父进程结束,子进程就会结束。原来问题完全不同
      • @ChristianStewart 你还记得你的问题是什么吗?我看到了类似的行为,但也很奇怪——如果进程在我的 dev 文件夹中,它工作正常。在打包到 MSI 并安装的应用程序中,杀死父母会杀死孩子。你有没有遇到过这种情况?
      • @Dave 不幸的是我没有,我不再使用 C# 了 :) 祝你好运!
      猜你喜欢
      • 1970-01-01
      • 2011-06-07
      • 2012-04-29
      • 1970-01-01
      • 2023-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多