一、问题背景
大家可能会遇到这样一种情况,自己编写代码的时候,主进程可能会创建很多子进程,但是此时主进程可能由于某种原因自己崩溃,或者认为通过任务管理器结束掉,这时候子进程可能就会依旧存在。下面介绍一种方法可以让到主进程无论什么原因是掉以后子进程也跟着被杀死。
二、技术点
其实也很简单,就是使用一个job内核对象。
三、代码
- #include <Windows.h>
-
-
- int main(int argc, char* argv[])
- {
- STARTUPINFOA Sinfo;
- PROCESS_INFORMATION pi;
- ZeroMemory(&Sinfo, sizeof(Sinfo));
- Sinfo.cb = sizeof(Sinfo);
- ZeroMemory(&pi, sizeof(pi));
-
- BOOL retVal = CreateProcessA("C:\\Windows\\SysWOW64\\notepad.exe",
- "", NULL, NULL, FALSE,
- 0,
- NULL, NULL, &Sinfo, &pi);
-
-
- HANDLE hd = CreateJobObjectA(NULL, "HelloWrold");
-
- if (hd)
- {
-
- JOBOBJECT_EXTENDED_LIMIT_INFORMATION extLimitInfo;
- extLimitInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
- retVal = SetInformationJobObject(hd,
- JobObjectExtendedLimitInformation,
- &extLimitInfo,
- sizeof(extLimitInfo));
-
- if (retVal)
- {
-
- if (pi.hProcess)
- {
- retVal = AssignProcessToJobObject(hd, pi.hProcess);
- }
- }
- }
-
- Sleep(10000);
- return 0;
- }
主进程退出的时候,杀死所有子进程
原文:http://www.cnblogs.com/h2zZhou/p/6860480.html