gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 08:06:01 24 4
gpt4 key购买 nike

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

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

“已退出”事件和函数“WaitForExit”会在进程明确退出时执行任何操作。所以这不是重点。

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

感谢您的宝贵时间。

最佳答案

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

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

挂起的进程将始终执行它被编码要做的事情。开发人员可能编码不当,但 Windows 无法假设什么是对/错。

可能的尝试可能是:

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

  2. 对于更一般的情况,一个可能的解决方案可能是每隔一段时间轮询进程的内存使用情况,如果经过足够的时间后它没有改变,则假定它已挂起。您可以使用 Process.WorkingSet64 执行此操作。但是,我预计这会导致一些误报——不处理任何东西的稳定进程可能看起来挂起。它还会导致漏报,即存在内存泄漏的挂起进程似乎在做一些有用的事情,而实际上它陷入了循环。

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

但您不会找到任何适用于一般情况的东西。

关于c# - 如何检查进程是否没有响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3500634/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com