Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1586回复:17

死进程的检测/监测

楼主#
更多 发布于:2002-03-29 09:54
    我需要对系统中的所有进程监测,确定是否是死进程。但在对于未创建窗口的进程时碰到了困难,因为在这种情况下我无法向它发送消息确定它是否有回应,从而判断它是否是死进程。
    不知道哪位兄弟作过类似的东西,可否告诉我如何监测未创建窗口的进程是否死掉。
Tom_lyd
ppl
ppl
驱动小牛
驱动小牛
  • 注册日期2001-06-13
  • 最后登录2006-05-21
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-03-29 10:59
进程死掉的标准是什么?
是不占用CPU么?
是一直占用CPU么?
我想也就交互程序,IO程序,可以判断是否死掉,
计算进程是没有办法判断的吧
yanghaoyun
驱动牛犊
驱动牛犊
  • 注册日期2002-03-22
  • 最后登录2002-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-03-29 11:37
监视进程不能靠发消息的方法,有的进程它不接受消息,即使接受它也可以不理你,可靠的方法我觉得应该看进程的运行时间,若一个进程长时间不运行(看 kernel time 和user time ),则可认为其为死进程。先用TOOLHELP32系列函数列出所有进程(包括隐藏的进程),然后依次打开所有进程,定时查看每个进程的运行时间,不就一切OK了吗?
jonny
驱动牛犊
驱动牛犊
  • 注册日期2002-02-04
  • 最后登录2002-05-06
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2002-03-29 11:57
好像有些进程长时间挂起但这是正常的,如winlogon.exe它只等待SAS序列啊。
我看这个问题不就是讨论操作系统里的进程死锁检测算法吗?
我记得书上说完全的死锁检测是不可能做到的,所以大家用研究死锁预防算法。{不要针对这句话发难啊,我也记不太清了}
BTW:用新闻组发的帖子好像在论坛上看不到,害我发的帖子都没有回应,郁闷。:(
yanghaoyun
驱动牛犊
驱动牛犊
  • 注册日期2002-03-22
  • 最后登录2002-08-20
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-03-29 13:48
这个问题还是很好解决,用我上述方法列出所有进程,定时检测所有进程的运行时间,排除已知的可能挂起的进程,不就妥了么?
无论是win9X系列还是winnt系列,系统进程都是已知的,(Tom_lyd要检测的不会是系统进程吧?若系统进程有毛病,只能重起)余下的进程若长时间不动,你既然已经看见了,还怕什?
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-03-29 13:54
To yanghaoyun:
    谢谢你的解答,你所说的检测进程运行时间的方法我试过,大多的时间还是可以的,不过有一种进程,它既没有窗口接收消息,也没有死,而是在一个死循环里面,这个时候这种方法就不灵了。
   有什么办法可以检测到那种没有窗口的陷入了死循环的进程吗?
Tom_lyd
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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没有可手工载入!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2002-03-31 14:25
哦还有可用GetProcessTimes
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
jame.z
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2004-05-11
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-04-02 12:14
请问killhs:
    大侠你怎么知道USER32.dll的函数原型?MSDN和DDK中都没有这两个函数的定义。
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2002-04-02 13:03
我粗略看了一下IsHungAppWindow,似乎好像也许它只是假装在窗口上创建一个region,然后给窗口发消息让它重画,然后判断它是否响应该消息。如果确实是这样,大家可以自己按这个思路来实现这个函数。我没时间仔细看,有兴趣的研究一下把结论告诉大家啊。
不过这个函数只适用于有窗口的进程,如果没有窗口,则不行了。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2002-04-02 16:08
偶们版主的主页上看到的!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2002-04-02 16:11
to lov1999
你再看一下IsHungThread哪个!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2002-04-02 16:18
to lov1999
你再看一下IsHungThread哪个!

你不是说那是98的吗?我正用2000呢。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2002-04-02 20:35
我想要你看一下98的
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2002-04-04 10:52
to lov1999
我看了一下IsHungAppWindow
它CALL进一个更新Rect数据的函数,调用中断2E就返回了,这个地址还有一个取线程ID的函数也CALL过!
98下的是CALL进UserSetdevicehlodstate中的一段代码

以上是经过2k p+98se+softice+idapro分析得到的。 :D
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2002-04-04 12:06
所以说我觉得有可能IsHungAppWindow 只是类似向窗口发消息,然后看它是否响应。
我没用IDA,只是用SoftIce看了一下。
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
流氓兔
驱动老牛
驱动老牛
  • 注册日期2001-06-27
  • 最后登录2005-02-28
  • 粉丝0
  • 关注0
  • 积分1分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2002-04-05 15:42
2k可能是你说的那样
98好象不同耶!
我是流氓!!!我怕谁!!! 不!!应该是我是老流氓!!!我怕谁!!![img]http://202.98.116.70:888/cgi-bin/newmov/bbs/attachment.cgi?forum=4&topic=25473&postno=1&type=.jpg[/img]
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2002-04-05 15:47
2k可能是你说的那样
98好象不同耶!

没研究过,我现在很少用98,对98没兴趣
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
游客

返回顶部