[英]How to make sure that the process is still running so that I can kill it?
我有一个Process
,我想Kill
; 但有时这会产生InvalidOperationException
,表示该进程已经退出。
为了防止异常,我试图检查进程是否退出:
if (!p.HasExited)
{
p.Kill();
}
但是,我偶尔也会看到异常。 由于该进程与我的代码并行运行,我认为问题可能基本上是竞争条件,即进程在check和Kill()
调用之间终止。
在不提出上述异常的情况下杀死进程的正确方法是什么? 当然,我可以尝试 - 捕捉有问题的代码,但这似乎不是解决这个问题的最佳方法。
您将无法解决此问题,因为存在内置竞争条件:当您调用p.HasExited
,该进程可能处于活动p.HasExited
,但是当您的程序调用p.Kill()
时可能已经退出了。
一个单独的进程本质上是一个并发实体,因此您需要某种形式的同步才能解决这种竞争条件。 但是,如果您不拥有相关流程的代码,则无法解决此问题,因为无法同步监控相关流程的流程活动和流程本身。
您应该无条件地发送kill信号,捕获特定异常,然后继续。
正确的方法是尝试退出进程并捕获异常。 该过程可能在您检查和调用退出之间的时间内结束。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.