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. }  

     

  • 相关阅读:
    从MVC和三层架构说到ssh整合开发-下
    Codeforces Round #226 (Div. 2)--A Bear and Raspberry
    ISA95的抽象惯例
    Difference between End-to-end testing and System testing
    javascript Date format(js日期格式化)
    给easyui datebox扩展一个清空按钮
    easyui combobox开启搜索自动完成功能
    给你的webstorm添加快速生成注释得快捷键
    location.origin兼容IE
    将json转换成struts参数
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/6860480.html
Copyright © 2011-2022 走看看