进程监控

父进程用于接收子进程退出状态并重启子进程

进程监控模型

void daemonlize()
{
    //1.创建子进程
    int ipid = fork();
    if(ipid < 0)
    {
        exit(-1);
    }else if(ipid > 0)
    {
        //2.父进程退出
        exit(0);
    }
    //3.子进程 设置会话ID
    setsid();
    //4.子进程 设置指向路径
    //5.子进程 重定向3个文件描述符到/dev/null
    int nullfd = open("/dev/null",O_RDWR);
    if(nullfd >= 0)
    {
        dup2(nullfd,0);
        dup2(nullfd,1);
        dup2(nullfd,2);
        close(nullfd);
    }
    // 进程监控
    while(1)
    {   
        int pid = fork();
        if(0 > pid)
        {   
            exit(0);
        }   
        /*父进程等子进程退出*/
        if(0<pid)
        {   
            int iStatus = 0;
            wait(&iStatus);
            if(0 == iStatus)
            {   
                exit(0);                                                                                 
            }   
        }   
        /*子进程跳出循环执行游戏业务*/
        else{
            break;
        }   
    }   
}
}

posted on 2021-06-30 10:50  lodger47  阅读(121)  评论(0)    收藏  举报

导航