如何检测进程为响应
如何才能得知一个进程未响应了呢?这里先谢谢了。 --------------------编程问答-------------------- 一个有窗口的进程,是可以估计它是否响应。就像Vista下的DWM(Desktop Windows Management)的做法 - 它给窗口线程发消息,如果发现5秒钟内没有回音,它就认为该窗口线程未响应。
你可模仿该做法。
先得到该进程的主窗口(假定该进程只有一个窗口线程);
用SendMessageTimeout API给他发空消息(WM_NULL);
如果超时,则认为该进程未响应 --------------------编程问答--------------------
那如果进程处于假死状态呢?比如:在主线程中处理大量的数据; --------------------编程问答-------------------- 那需要使用多线程,另外开一个线程处理数据,保证主线程能响应消息 --------------------编程问答-------------------- 假死就是不响应咯...
另外这方法仅限于有窗体的进程. --------------------编程问答-------------------- 可以用win32API GetMessage或者是PeekMessage 去查进程的阻塞状态 --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- Process..::.Responding Property
Gets a value indicating whether the user interface of the process is responding.
Namespace: System.Diagnostics
Assembly: System (in System.dll)
C#
public bool Responding { get; } --------------------编程问答--------------------
这个更简单 - Process类已经提供这个功能了:)
要注意如果该Process没有窗口,Responding将一直返回true。 --------------------编程问答-------------------- MARK --------------------编程问答-------------------- 关注 --------------------编程问答-------------------- 无窗体的进程怎么判断呢? --------------------编程问答--------------------
无窗体的进程没有正常的人机交互界面,没有交互,又何所谓响应呢?
Windows服务则用另外一种状态检查,它们要响应SERVICE_CONTROL_INTERROGATE调查。
补充:.NET技术 , C#