等到进程不再运行或直到超时,以先发生者为准

时间:2010-08-19 09:24:33

标签: c# .net timeout

我想使用taskkill杀死在机器上运行的进程,如果它们在X秒后仍在运行(Windows服务已停止但进程耗尽需要时间) 在C#(.net 2.0或可能是3.0)中完成上述操作的最正确方法是什么?

我有一个实用程序方法,用于在给定进程名称(使用Process.GetProcesses())的情况下验证进程是否仍在运行。 (由于我的代码没有生成该过程,我无法使用WaitTillExit知道它何时不再运行)

PS:进程在远程计算机上运行

3 个答案:

答案 0 :(得分:38)

实际上,您可以使用Process.WaitForExit()。

只需通过

等待进程
Process p = Process.GetProcessById(iYourID);

然后致电

if(!p.WaitForExit(iYourInterval))
{ 
    p.Kill();
}

您也可以通过

的名称获取流程
Process.GetProcessesByName(strYourProcessName);

答案 1 :(得分:11)

你可以调用Process.WaitForExit,传递适当的超时。这样您就不需要使用自己的检查来查看进程是否仍在运行。

答案 2 :(得分:10)

Process p = ...

bool exited = p.WaitForExit(10000); // 10 seconds timeout