服务进程崩溃重启示例

来源:互联网 发布:金山恢复软件大师 编辑:程序博客网 时间:2024/05/30 05:27

在嵌入式linux中, 为了防止服务进程意外结束导致机器故障,可以创建一个子进程,父进程监控子进程。如果子进程结束,则重新创建子进程。从而实现服务进程崩溃重启。


<span style="font-size:18px;">int main(int argc, char *argv[]){    pid_t pid;    int status;    pid = fork();    if (pid == 0) {        qDebug() << "server process" << getpid();        return mainentry(argc, argv);    } else {        while (1) {            qDebug() << "demon process" << getpid();            waitpid(pid, &status, 0);            if (WIFEXITED(status))                break;            if (QFile::exists("/tmp/poweroff.flag"))                break;            qDebug() << "error" << status << "try to restart server...";            pid = fork();            if (pid == 0) {                qDebug() << "server process" << getpid();                mainentry(argc, argv);            }        }    }    return 0;}</span>

其中WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。


0 0