windows 下进程是否启动检测

在最近做的一个项目中需要用到检测进程状态的功能,在网上兜了半圈,普遍介绍的方法有三种:
1. 是利用GetExitCodeProcess(pi.hProcess,&dwExitCode);通过看dwExitCode返回值是不是STILL_ACTIVE,依然活动,说明存在;
2 .waitforsingleobject,通过超时来判断,具体的实现方法可以去网上查,
3. openprocess,通过返回值来判断,如果返回值为NULL则表示进程已经打开,否则没有打开。
上面3个方法别人都说行,也有人说有局限性,就拿openprocess来说吧,自己在测试是发现线程关掉了但是返回值还是NULL,郁闷啊~~,没办法只能用最土的办法来解决这个问题,
4. load系统的进程表,看进程id是不是匹配,匹配则表示正在运行,否则就已经挂了,代码如下:
#include <Tlhelp32.h>

//如果有运行,返回进程的true,没运行返回false
bool ProcessExist(DWORD process_id) 

PROCESSENTRY32 pe; 
DWORD id = 0; 
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0); 
pe.dwSize = sizeof(PROCESSENTRY32); 
if( !Process32First(hSnapshot,&pe) ) 
{
  CloseHandle(hSnapshot);
  return false;
}
 
while(1) 

pe.dwSize = sizeof(PROCESSENTRY32); 
if( Process32Next(hSnapshot,&pe)==FALSE ) 
{
  CloseHandle(hSnapshot);
  return false;
}
if(process_id == pe.th32ProcessID) 


  CloseHandle(hSnapshot);
  return true;
 


}

posted on 2012-08-22 16:55 sheng 阅读(2774) 评论(3)  编辑 收藏 引用

评论

# re: windows 下进程是否启动检测 2012-08-22 21:39 augustheart

不用互斥对象么?  回复  更多评论   

# re: windows 下进程是否启动检测 2012-08-23 08:48 sheng

这个没有必要用互斥对象吧,只是读进程表而已@augustheart
  回复  更多评论   

# re: windows 下进程是否启动检测 2012-08-29 16:01 leng

这种方法还有缺陷的
如果在多用户的机器下, 不同的用户下看不到对方用户下的进程   回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


导航

<2024年12月>
24252627282930
1234567
891011121314
15161718192021
22232425262728
2930311234

统计

常用链接

留言簿(1)

随笔档案

收藏夹

同行

搜索

最新评论

阅读排行榜

评论排行榜