C# 等待进程不再运行或超时结束,以先发生的为准

C# 等待进程不再运行或超时结束,以先发生的为准,c#,.net,timeout,C#,.net,Timeout,如果在X秒后仍在运行,我想使用taskkill终止计算机上运行的进程(windows服务已停止,但进程消失需要时间) 在C#(.NET2.0或可能是3.0)中实现上述功能的最正确方法是什么 我提供了一种实用方法,用于在给定进程名称的情况下验证进程是否仍在运行(使用process.getprocesss())。 (由于进程不是由我的代码生成的,因此我无法使用WaitTillExit来知道它何时不再运行) PS:该进程在远程计算机上运行您可以调用,并通过适当的超时。这样,您就不需要使用自己的检查来查

如果在X秒后仍在运行,我想使用taskkill终止计算机上运行的进程(windows服务已停止,但进程消失需要时间) 在C#(.NET2.0或可能是3.0)中实现上述功能的最正确方法是什么

我提供了一种实用方法,用于在给定进程名称的情况下验证进程是否仍在运行(使用
process.getprocesss()
)。 (由于进程不是由我的代码生成的,因此我无法使用WaitTillExit来知道它何时不再运行)


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

您可以调用,并通过适当的超时。这样,您就不需要使用自己的检查来查看进程是否仍在运行。

事实上,您可以使用process.WaitForExit()

Process p = ...

bool exited = p.WaitForExit(10000); // 10 seconds timeout
只需让流程等待via即可

Process p = Process.GetProcessById(iYourID);
然后打电话

if(!p.WaitForExit(iYourInterval))
{ 
    p.Kill();
}
您还可以通过以下方式通过进程名称获取进程:

Process.GetProcessesByName(strYourProcessName);

如果进程在超时后仍在运行,我不确定这是如何实现“杀死”进程的,不过……我以为您将使用taskkill?
WaitForExit
返回
false
,如果进程在超时后仍在运行;用这个来决定是否杀死Itarrgh,现在意识到这个问题的措辞不正确。将立即编辑,请重新查看。酷!现在,如果我可以在远程机器上使用它,这正是所需要的(因为我需要用相同的exe名称杀死一大堆进程),谢谢!不要忘记
Kill()
异步执行,并且不会杀死任何子进程(请参阅)。如果您想等待进程实际被终止,请使用
p.WaitForExit()
进行后续操作。