C# 如何确保进程仍在运行,以便我可以终止它?

C# 如何确保进程仍在运行,以便我可以终止它?,c#,windows,C#,Windows,我有一个进程,我想杀死它;但是,有时这会产生invalidoOperationException,表示进程已经退出 为了防止出现异常,我尝试检查进程是否已退出: if (!p.HasExited) { p.Kill(); } 然而,我仍然偶尔看到例外。由于进程与我的代码并行运行,因此我假设问题本质上可能是一种竞争条件,即进程在检查和Kill()调用之间终止 在不引发上述异常的情况下终止进程的正确方法是什么?当然,我可以试着去理解有问题的代码,但这似乎不是解决这个问题的最佳方法。您将无法

我有一个
进程
,我想
杀死它
;但是,有时这会产生
invalidoOperationException
,表示进程已经退出

为了防止出现异常,我尝试检查进程是否已退出:

if (!p.HasExited)
{
    p.Kill();
}
然而,我仍然偶尔看到例外。由于进程与我的代码并行运行,因此我假设问题本质上可能是一种竞争条件,即进程在检查和
Kill()
调用之间终止


在不引发上述异常的情况下终止进程的正确方法是什么?当然,我可以试着去理解有问题的代码,但这似乎不是解决这个问题的最佳方法。

您将无法解决这个问题,因为存在一个内置的竞争条件:当您调用
p.HasExited
时,进程可能处于活动状态,但当您的程序调用
p.Kill()时,进程可能处于活动状态
它可能已经退出

一个单独的进程本质上是一个并发实体,因此您需要某种形式的同步来解决这种竞争条件。但是,在您不拥有相关流程的代码的情况下,无法解决此问题,因为无法同步监控相关流程的程序活动和流程本身


您应该无条件地发送终止信号,捕获特定异常,然后继续。正确的方法是尝试退出进程并捕获异常。这个过程可能在您检查和调用出口之间的时间内结束。

我想您已经被棘手的解决方案困住了。另外,请参见以下答案: