服务进程崩溃重启示例

2019-07-13 01:34发布

在嵌入式linux中, 为了防止服务进程意外结束导致机器故障,可以创建一个子进程,父进程监控子进程。如果子进程结束,则重新创建子进程。从而实现服务进程崩溃重启。
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; }
其中WIFEXITED(status) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。