【问题标题】:Wait till process is no longer running OR until timeout has passed, whichever happens first等到进程不再运行或直到超时已经过去,以先发生者为准
【发布时间】:2011-04-01 00:37:29
【问题描述】:

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

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

PS:进程在远程机器上运行

【问题讨论】:

    标签: c# .net timeout


    【解决方案1】:

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

    【讨论】:

    • 我不确定如何实现“杀死”进程,如果它在超时后运行,但...
    • 我以为你会使用 taskkill?
    • WaitForExit 如果超时后进程仍在运行,则返回false;用它来决定是否杀死它
    • Arrggh,现在意识到问题的措辞不正确。现在将编辑,请再次查看。
    【解决方案2】:
    Process p = ...
    
    bool exited = p.WaitForExit(10000); // 10 seconds timeout
    

    【讨论】:

      【解决方案3】:

      其实你可以使用 Process.WaitForExit()。

      只需让进程等待通过

      Process p = Process.GetProcessById(iYourID);
      

      然后调用

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

      您还可以通过进程的名称获取进程

      Process.GetProcessesByName(strYourProcessName);
      

      【讨论】:

      • 酷!现在,如果我可以在远程机器上工作,这正是所需要的(因为我需要杀死一大堆具有相同 exe 名称的进程)谢谢!
      • 不要忘记Kill() 异步执行并且不会杀死任何子进程(请参阅MSDN)。如果您想等待进程实际被终止,请跟进p.WaitForExit()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多