就像进程管理器中的“正在运行”或者“无反应”
]
有高人提过可以检测进程所有的线程堆栈,但我不知如何做。
有比较好,直接点,稍为现实一点的方法吗?另外,怎么获得进程的CPU占用率?内存占用呢?最好是有ACE实现
这些在unix 下都好做。但WIN下就。

解决方案 »

  1.   

    如何“干净地”终止 Win32 中的应用程序
    http://support.microsoft.com/kb/178893/zh-cn
    How To Detect If an Application Has Stopped Responding
    http://support.microsoft.com/kb/231844
    304991 Detect if an Application Has Stopped Responding by Using C# 
    http://support.microsoft.com/kb/304991
    304990 Detect if an Application has Stopped Responding by Using Visual Basic .NET 
    http://support.microsoft.com/kb/304990
      

  2.   

    http://www.vchelp.net/itbookreview/view_paper.asp?paper_id=587
      

  3.   

    进程管理器中的“正在运行”或者“无反应”
    是通过向该进程的窗口发送消息,视该消息在规定的时间内有无被响应来判断的
    用 SendMessageTimeout 函数实现用该函数象窗口发送消息,在指定时间内消息没有被处理,就会超时,函数调用失败
      

  4.   

    IsHungAppWindow检查进程是否停止响应。
      

  5.   

    另外,怎么获得进程的CPU占用率?内存占用呢?
    通过Performance Counters(PSAPI)
      

  6.   

    问题是我要管的进程有些是控制台下的。没窗口风格,不能接收消息啊,而且不能更改这些进程的。
    这时任务管理器可以做到。但上面这些API都没法做到吧。
    我把任务管理器反汇编了,找了老半天也只找到SendMessageTimeOut没找到其它,但它却是不行的。看来不是这个。只是我功力未够罢。
      

  7.   

    IsHungAppWindow也是要求窗口风格吧。我再试试但不抱什么希望。
      

  8.   

    对,我用错了。
    怎么才能用得上GetWindowModuleFileName?只包含winuser.h是编译通不过的。用loadLibrary,GetProcAddress又太麻烦。