关于进程的枚举与关闭
来源:互联网 发布:多特软件站 编辑:程序博客网 时间:2024/04/27 23:19
后台服务要启动一系列的子进程。当后台服务 关闭时需要将子进程进行关闭。但是在关闭子进程时为了避免错杀漏杀可以通过进程的父进程来判断。
首先获得本服务的进程号
使用 GetCurrentProcessId 获得当前进程的ID
使用 CreateToolhelp32Snapshot 、Process32First 、Process32Next 来枚举当前所有进程,判断当前被枚举的进程的父进程是否与当前进程的ID相同。以此来判断是否该关闭该进程。
示例代码:(从类中直接摘出)
.h文件
// add by loken 20071108
#ifndef _PROSTATUS_H
#define _PROSTATUS_H
typedef struct TProcessStatus{
TCHAR wsProcessName[128*2];
DWORD dwPID;
DWORD dwParantPID;
}stProcessStatus;
#endif
stProcessStatus ProStatus[256];
int iEnumCnt;
DWORD dwCurrProID;
int ProcessList();
int TerminateProcessFromId(DWORD dwId);
// end loken add
int CSpService::ProcessList(){
PROCESSENTRY32 pe32;
pe32.dwSize=sizeof(pe32);
int count=0;
HANDLE hProcessSnap=::CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
if(hProcessSnap==INVALID_HANDLE_VALUE){
wprintf(_T("CreateToolhelp32Snapshot调用失败!"));
return -1;
}
BOOL bMore=::Process32First(hProcessSnap,&pe32);
wprintf(_T("%20s/t%10s/t%10s/n"),_T("进程名"),_T("PID"),_T("ParentID"));
ZeroMemory(ProStatus,sizeof(ProStatus));
while(bMore){
count++;
wsprintf(ProStatus[iEnumCnt].wsProcessName,_T("%s"),pe32.szExeFile);
ProStatus[iEnumCnt].dwPID = pe32.th32ProcessID;
ProStatus[iEnumCnt].dwParantPID = pe32.th32ParentProcessID;
bMore=::Process32Next(hProcessSnap,&pe32);
wprintf(_T("%s/t%ld/t%ld/n"),pe32.szExeFile,pe32.th32ProcessID,pe32.th32ParentProcessID);
iEnumCnt++;
}
::CloseHandle(hProcessSnap);
// get Current Process ID
dwCurrProID = GetCurrentProcessId();
return 0;
}
int CSpService::TerminateProcessFromId(DWORD dwId)
{
BOOL bRet=FALSE;
HANDLE hProcess=::OpenProcess(PROCESS_ALL_ACCESS,FALSE,dwId);
if(hProcess!=NULL)
{
bRet=::TerminateProcess(hProcess,0);
}
::CloseHandle(hProcess);
if(bRet)
printf("%d 进程结束成功....../n/n/n/n",dwId);
else
printf("%d 进程结束失败....../n/n/n/n",dwId);
return 0;
}
关闭:
for (int i=0; i<iEnumCnt; i++){
if (ProStatus[i].dwParantPID == dwCurrProID)
TerminateProcessFromId(ProStatus[i].dwPID);
}
- 关于进程的枚举与关闭
- 【进程处理】1,枚举进程,关闭进程
- 关于杀进程关闭activity的时候onDestroy的执行情况
- 关于进程重启 关闭
- 关于.net创建excel文件关闭进程的奇怪现象
- 关于调用TerminateProcess关闭其他进程的权限问题
- 枚举进程的代码
- 枚举进程的方法
- 进程的枚举
- 关于数据库连接的打开与关闭
- 关于数据库连接的打开与关闭
- 关于输入法的弹出与关闭
- VC++枚举进程与模块
- 进程模块枚举与隐藏
- 关闭进程的方法
- 关闭不必要的进程
- 关闭程序的“进程”
- C# 进程启动与关闭
- 开博啦!
- sscanf.c
- stack_cd.cpp
- static.c
- 大千世界里的封装
- 关于进程的枚举与关闭
- 海南行观感(一)
- static.cpp
- EJB3.0学习笔记之三 Interceptor
- stat_fun.cpp
- 自定义Http处理及应用之HttpHandler篇
- 第一次来这里,写点什么呢?
- 终结"AV终结者"
- PGP实现电子邮件安全(实验报告)