结束进程树

来源:互联网 发布:php数组中删除指定元素 编辑:程序博客网 时间:2024/05/22 09:47
void KillProcessTree(DWORD dwProcessID)

PROCESSENTRY32 info;
info.dwSize = sizeof(PROCESSENTRY32 );
//结束进程句柄
HANDLE hProcess = NULL;
DWORD dwParentPID = 0;
DWORD dwChildPID = 0;
HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, dwProcessID);
if(hProcessSnap == INVALID_HANDLE_VALUE)
{
return ;
}
// 遍历进程快照,轮流显示每个进程的信息
BOOL bMore = Process32First(hProcessSnap, &info);


while( bMore != FALSE)
{
// 如果找个父进程句柄是需要关闭的ID,就已经完成查找
if (dwProcessID == info.th32ParentProcessID)
{
dwParentPID = info.th32ParentProcessID;
dwChildPID = info.th32ProcessID;
break;
}
// 如果找到dwProcessID进程,就只保存父线程ID
if (dwProcessID == info.th32ProcessID)
{
dwParentPID = info.th32ProcessID;
}
bMore = Process32Next(hProcessSnap, &info);
}
if (dwChildPID)
{
// 如果有子线程先结束子线程
hProcess=OpenProcess(PROCESS_TERMINATE, FALSE, dwChildPID);
if (NULL == hProcess)
{
return ;
}
TerminateProcess(hProcess, 0);
CloseHandle(hProcess);
}
if (dwParentPID)
{
hProcess=OpenProcess(PROCESS_TERMINATE, FALSE, dwParentPID);
if (NULL == hProcess)
{
return ;
}
TerminateProcess(hProcess, 0);
CloseHandle(hProcessSnap);
}
}
原创粉丝点击