首页 > 代码库 > 主进程退出的时候,杀死所有子进程
主进程退出的时候,杀死所有子进程
一、问题背景
大家可能会遇到这样一种情况,自己编写代码的时候,主进程可能会创建很多子进程,但是此时主进程可能由于某种原因自己崩溃,或者认为通过任务管理器结束掉,这时候子进程可能就会依旧存在。下面介绍一种方法可以让到主进程无论什么原因是掉以后子进程也跟着被杀死。
二、技术点
其实也很简单,就是使用一个job内核对象。
三、代码
[cpp] view plain copy
- #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);
- //创建一个job内核对象
- HANDLE hd = CreateJobObjectA(NULL, "HelloWrold");
- if (hd)
- {
- //设置job内核对象限制条件为:当job对象关闭的时候,关闭其所有子进程
- JOBOBJECT_EXTENDED_LIMIT_INFORMATION extLimitInfo;
- extLimitInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
- retVal = SetInformationJobObject(hd,
- JobObjectExtendedLimitInformation,
- &extLimitInfo,
- sizeof(extLimitInfo));
- if (retVal)
- {
- //将进程加入到job容器中去。
- if (pi.hProcess)
- {
- retVal = AssignProcessToJobObject(hd, pi.hProcess);
- }
- }
- }
- Sleep(10000);
- return 0;
- }
主进程退出的时候,杀死所有子进程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。