阅读:1587回复:17
死进程的检测/监测
我需要对系统中的所有进程监测,确定是否是死进程。但在对于未创建窗口的进程时碰到了困难,因为在这种情况下我无法向它发送消息确定它是否有回应,从而判断它是否是死进程。
不知道哪位兄弟作过类似的东西,可否告诉我如何监测未创建窗口的进程是否死掉。 |
|
|
沙发#
发布于:2002-03-29 10:59
进程死掉的标准是什么?
是不占用CPU么? 是一直占用CPU么? 我想也就交互程序,IO程序,可以判断是否死掉, 计算进程是没有办法判断的吧 |
|
板凳#
发布于:2002-03-29 11:37
监视进程不能靠发消息的方法,有的进程它不接受消息,即使接受它也可以不理你,可靠的方法我觉得应该看进程的运行时间,若一个进程长时间不运行(看 kernel time 和user time ),则可认为其为死进程。先用TOOLHELP32系列函数列出所有进程(包括隐藏的进程),然后依次打开所有进程,定时查看每个进程的运行时间,不就一切OK了吗?
|
|
地板#
发布于:2002-03-29 11:57
好像有些进程长时间挂起但这是正常的,如winlogon.exe它只等待SAS序列啊。
我看这个问题不就是讨论操作系统里的进程死锁检测算法吗? 我记得书上说完全的死锁检测是不可能做到的,所以大家用研究死锁预防算法。{不要针对这句话发难啊,我也记不太清了} BTW:用新闻组发的帖子好像在论坛上看不到,害我发的帖子都没有回应,郁闷。:( |
|
地下室#
发布于:2002-03-29 13:48
这个问题还是很好解决,用我上述方法列出所有进程,定时检测所有进程的运行时间,排除已知的可能挂起的进程,不就妥了么?
无论是win9X系列还是winnt系列,系统进程都是已知的,(Tom_lyd要检测的不会是系统进程吧?若系统进程有毛病,只能重起)余下的进程若长时间不动,你既然已经看见了,还怕什? |
|
5楼#
发布于:2002-03-29 13:54
To yanghaoyun:
谢谢你的解答,你所说的检测进程运行时间的方法我试过,大多的时间还是可以的,不过有一种进程,它既没有窗口接收消息,也没有死,而是在一个死循环里面,这个时候这种方法就不灵了。 有什么办法可以检测到那种没有窗口的陷入了死循环的进程吗? |
|
|
6楼#
发布于:2002-03-31 14:24
有个好办法就时用USER32.DLL的API:
bool IsHungAppWindow(HWND)(For NT) or bool IsHungThread(HWND) (For 9x) 这两个函数在user32.dll一个是NT的一个是9X的 在user32.lib没有可手工载入! |
|
|
7楼#
发布于:2002-03-31 14:25
哦还有可用GetProcessTimes
|
|
|
8楼#
发布于:2002-04-02 12:14
请问killhs:
大侠你怎么知道USER32.dll的函数原型?MSDN和DDK中都没有这两个函数的定义。 |
|
9楼#
发布于:2002-04-02 13:03
我粗略看了一下IsHungAppWindow,似乎好像也许它只是假装在窗口上创建一个region,然后给窗口发消息让它重画,然后判断它是否响应该消息。如果确实是这样,大家可以自己按这个思路来实现这个函数。我没时间仔细看,有兴趣的研究一下把结论告诉大家啊。
不过这个函数只适用于有窗口的进程,如果没有窗口,则不行了。 |
|
|
10楼#
发布于:2002-04-02 16:08
偶们版主的主页上看到的!
|
|
|
11楼#
发布于:2002-04-02 16:11
to lov1999
你再看一下IsHungThread哪个! |
|
|
12楼#
发布于:2002-04-02 16:18
to lov1999 你不是说那是98的吗?我正用2000呢。 |
|
|
13楼#
发布于:2002-04-02 20:35
我想要你看一下98的
|
|
|
14楼#
发布于:2002-04-04 10:52
to lov1999
我看了一下IsHungAppWindow 它CALL进一个更新Rect数据的函数,调用中断2E就返回了,这个地址还有一个取线程ID的函数也CALL过! 98下的是CALL进UserSetdevicehlodstate中的一段代码 以上是经过2k p+98se+softice+idapro分析得到的。 :D |
|
|
15楼#
发布于:2002-04-04 12:06
所以说我觉得有可能IsHungAppWindow 只是类似向窗口发消息,然后看它是否响应。
我没用IDA,只是用SoftIce看了一下。 |
|
|
16楼#
发布于:2002-04-05 15:42
2k可能是你说的那样
98好象不同耶! |
|
|
17楼#
发布于:2002-04-05 15:47
2k可能是你说的那样 没研究过,我现在很少用98,对98没兴趣 |
|
|