如何确保进程仍在运行以便我可以杀死它?

时间:2014-10-24 13:19:37

标签: c# windows

我想要Process Kill;但有时这会产生InvalidOperationException,表示该过程已经退出。

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

if (!p.HasExited)
{
    p.Kill();
}

但是,我偶尔也会看到异常。由于该过程与我的代码并行运行,我认为问题可能基本上是竞争条件,即该过程在支票和Kill()电话之间终止。

在不提出上述异常的情况下杀死进程的正确方法是什么?当然,我可以尝试 - 捕捉有问题的代码,但这似乎不是解决这个问题的最佳方法。

2 个答案:

答案 0 :(得分:7)

您无法解决此问题,因为存在内置竞争条件:当您致电p.HasExited时,该过程可能仍处于活动状态,但是当您的程序出现时调用p.Kill()它可能已经退出。

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

你应该无条件地发送杀戮信号,捕获特定的异常,继续前进。

答案 1 :(得分:3)

正确的方法是尝试退出进程并捕获异常。该过程可能在您检查和调用退出之间的时间内结束。