zoukankan      html  css  js  c++  java
  • 主进程退出的时候,杀死所有子进程

    一、问题背景

        大家可能会遇到这样一种情况,自己编写代码的时候,主进程可能会创建很多子进程,但是此时主进程可能由于某种原因自己崩溃,或者认为通过任务管理器结束掉,这时候子进程可能就会依旧存在。下面介绍一种方法可以让到主进程无论什么原因是掉以后子进程也跟着被杀死。

    二、技术点

        其实也很简单,就是使用一个job内核对象。

    三、代码

    [cpp] view plain copy
     
     在CODE上查看代码片派生到我的代码片
    1. #include <Windows.h>  
    2.   
    3.   
    4. int main(int argc, char* argv[])  
    5. {  
    6.     STARTUPINFOA Sinfo;  
    7.     PROCESS_INFORMATION pi;  
    8.     ZeroMemory(&Sinfo, sizeof(Sinfo));  
    9.     Sinfo.cb = sizeof(Sinfo);  
    10.     ZeroMemory(&pi, sizeof(pi));  
    11.   
    12.     BOOL retVal = CreateProcessA("C:\Windows\SysWOW64\notepad.exe",  
    13.         "", NULL, NULL, FALSE,  
    14.         0,  
    15.         NULL, NULL, &Sinfo, &pi);  
    16.   
    17.     //创建一个job内核对象  
    18.     HANDLE hd = CreateJobObjectA(NULL, "HelloWrold");  
    19.   
    20.     if (hd)  
    21.     {  
    22.         //设置job内核对象限制条件为:当job对象关闭的时候,关闭其所有子进程  
    23.         JOBOBJECT_EXTENDED_LIMIT_INFORMATION extLimitInfo;  
    24.         extLimitInfo.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;  
    25.          retVal = SetInformationJobObject(hd,  
    26.             JobObjectExtendedLimitInformation,  
    27.             &extLimitInfo,  
    28.             sizeof(extLimitInfo));  
    29.   
    30.         if (retVal)  
    31.         {  
    32.             //将进程加入到job容器中去。  
    33.             if (pi.hProcess)  
    34.             {  
    35.                 retVal = AssignProcessToJobObject(hd, pi.hProcess);  
    36.             }  
    37.         }  
    38.     }  
    39.   
    40.     Sleep(10000);  
    41.     return 0;  
    42. }  

     

  • 相关阅读:
    [TJOI2019]大中锋的游乐场——最短路+DP
    [TJOI2019]甲苯先生的滚榜——非旋转treap
    [TJOI2019]甲苯先生的字符串——矩阵乘法+递推
    [TJOI2019]唱、跳、rap和篮球——NTT+生成函数+容斥
    [ZJOI2020]字符串
    Ubuntu 20.04 工作区小记
    2020省选犯傻记
    寒假到省选的一些笔记
    AtCoder tokiomarine2020 题解
    [CF1336E]Chiori and Doll Picking
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/6860480.html
Copyright © 2011-2022 走看看