在最近做的一個項目中需要用到檢測進程狀態的功能
在網上兜了半圈
普遍介紹的方法有三種
是利用GetExitCodeProcess(pi
hProcess
&dwExitCode)
通過看dwExitCode返回值是不是STILL_ACTIVE
依然活動
說明存在
waitforsingleobject
通過超時來判斷
具體的實現方法可以去網上查
openprocess
通過返回值來判斷
如果返回值為NULL則表示進程已經打開
否則沒有打開
上面
個方法別人都說行
也有人說有局限性
就拿openprocess來說吧
自己在測試是發現線程關掉了但是返回值還是NULL
郁悶啊~~
沒辦法只能用最土的辦法來解決這個問題
load系統的進程表
看進程id是不是匹配
匹配則表示正在運行
否則就已經掛了
代碼如下
#include <Tlhelp
h>
//如果有運行
返回進程的true
沒運行返回false
bool ProcessExist(DWORD process_id)
{
PROCESSENTRY
pe;
DWORD id =
;
HANDLE hSnapshot = CreateToolhelp
Snapshot(TH
CS_SNAPPROCESS
)
pe
dwSize = sizeof(PROCESSENTRY
)
if( !Process
First(hSnapshot
&pe) )
{
CloseHandle(hSnapshot)
return false;
}
while(
)
{
pe
dwSize = sizeof(PROCESSENTRY
)
if( Process
Next(hSnapshot
&pe)==FALSE )
{
CloseHandle(hSnapshot)
return false;
}
if(process_id == pe
th
ProcessID)
{
CloseHandle(hSnapshot)
return true;
}
}
}
From:http://tw.wingwit.com/Article/os/xtgl/201311/9254.html