如果其他进程没有响应,是否有可能从代码中检查?
问题是,即使应用程序崩溃并且管理器列表中标记为“无响应”,Process.Responding属性仍然返回'true'。
如果流程是明确的,那么'退出'事件和函数'WaitForExit'会执行任何操作。所以这不是重点。
两个字的问题;我需要知道应用程序崩溃了。如何从代码中检查它?
感谢您的时间。
答案 0 :(得分:20)
此问题没有一般解决方法。
无法判断特定进程是否挂起,因为术语“挂起”完全取决于正在执行的进程的上下文。
挂起过程将始终执行编码操作。开发人员可能对其编码很糟糕,但Windows不能对正确/错误做出假设。
尝试的可能想法可能是:
Process.Responding调用将指示正在执行Windows消息循环的进程是否正在响应。
对于更一般的情况,一种可能的解决方案可能是每隔一段时间轮询进程的内存使用情况,如果在足够的时间后没有更改,则假设它已挂起。您可以使用Process.WorkingSet64
执行此操作。但是,我希望这会导致一些误报 - 没有处理任何事情的稳定进程可能会出现问题。它还会导致漏报,其中有内存泄漏的挂起过程似乎在做一些有用的事情,而事实上它却陷入了循环中。
如果进程写入StandardError / StandardOutput流(尽可能多的控制台应用程序),那么您可以尝试侦听此类输出:Process.BeginOutputReadLine
和Process.BeginErrorReadLine
。如果在给定时间内没有这样的输出,您可能会推断它已经挂起。
但是你不会找到任何适用于一般情况的东西。