主進程退出的時候,殺死所有子進程

一、問題背景

    大家可能會遇到這樣一種情況,自己編寫代碼的時候,主進程可能會創建很多子進程,但是此時主進程可能由於某種原因自己崩潰,或者認爲通過任務管理器結束掉,這時候子進程可能就會依舊存在。下面介紹一種方法可以讓到主進程無論什麼原因是掉以後子進程也跟着被殺死。


二、技術點

    其實也很簡單,就是使用一個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);

    //創建一個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;
}


發佈了42 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章