如何检查进程是否没有响应?

如果其他进程没有响应,是否有可能从代码中检查?

问题是即使应用程序崩溃并且管理器列表上标记为“无响应”,Process.Responding属性仍然返回’true’。

如果流程是明确的,那么’退出’事件和函数’WaitForExit’可以执行任何操作。 所以这不是重点。

两个字的问题; 我需要知道应用程序崩溃了。 如何从代码中检查它?

感谢您的时间。

这个问题没有通用的解决方案。

无法判断特定进程是否挂起,因为术语“挂起”完全取决于正在执行的进程的上下文。

挂起过程将始终执行编码操作。 开发人员可能对其进行了严格编码,但Windows无法对正确/错误进行假设。

可能尝试的想法可能是:

  1. Process.Responding调用将指示正在执行Windows消息循环的进程是否正在响应。

  2. 对于更一般的情况,一种可能的解决方案可能是每隔一段时间轮询进程的内存使用情况,如果在足够的时间后没有更改,则假设它已挂起。 您可以使用Process.WorkingSet64执行此操作。 但是,我希望这会导致一些误报 – 没有处理任何事情的稳定进程可能会出现问题。 它也会导致漏报,其中一个有内存泄漏的挂起过程似乎在做一些有用的事情,而实际上它被卡在一个循环中。

  3. 如果进程写入StandardError / StandardOutput流(就像许多控制台应用程序那样),那么您可以尝试侦听此类输出: Process.BeginOutputReadLineProcess.BeginErrorReadLine 。 如果在给定时间段内没有此类输出,您可能会推断它已挂起。

但是你不会在一般情况下找到任何有用的东西。