繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM