守护进程的原理和C++实现守护进程的代码

6833 人浏览 | 时间: 2016-11-19 00:48:25 | 作者: codexia 会员文章,禁止转载

    守护进程,顾名思义,也就是专门守护一个进程的进程。守护进程的职责就是专门确保被指定的进程的运行。

    最直接的应用就是重启进程。如果我们的软件崩溃了,为了让软件重新运行起来,软件本身是无法不方便或者无法做到的。因为出故障就是软件本身,而这个故障严重到迫使软件本身挂掉了,自然也没有办法重启自己了。

    那么可以借助一个专门的进程来帮助自己启动咯。守护进程当然不仅限于重启进程咯。要实现什么守护功能,就看你怎么实现了。你可以守护进程不被关闭,重启进程,也可以守护进程的网络,必要的配置文件等等。

    守护进程好比是保镖,被守护的进程就是保镖保护的对象。守护进程在很多地方都会有应用。

    我就先拿QQ来举例说明守护进程可以做的事情之一,即启动进程。

    QQ的安装目录如下所示:

#include <Windows.h>
#include "tchar.h"
//此处设置;链接器可以让启动的控制台程序后台运行,看不到界面。
#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"" )
void main()
{
    while(true)
    {
        TCHAR szCmdLine[]=_T("./1.exe"); //要启动的程序,被守护的exe程序文件路径
        STARTUPINFO si = {sizeof(si)};//启动信息结构体
		PROCESS_INFORMATION pi={0};//创建后的进程信息结构体
        if(!CreateProcess(NULL,szCmdLine,NULL,NULL,FALSE,0,NULL,NULL,&si,&pi)) 
        { 
            ::MessageBox(NULL,_T("启动失败!"),_T("启动程序提示"),0); 
            return;
        }
        WaitForSingleObject(pi.hProcess,INFINITE);
		CloseHandle(pi.hThread);
        CloseHandle(pi.hProcess);
    }
}
     代码就不多解释了,代码中有详细注释,如果需要了解启动进程,可以阅读《在程序写代码启动/调用浏览器和外部程序》,如果想了解守护进程的另一个用法,即自删除功能实现,可以阅读《程序自删除技术实现源码分享和技术实现详细分析》。
当前文章为会员文章,请前往[用户中心]开通会员后继续阅读。

相关阅读