在嵌入式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) 这个宏用来指出子进程是否为正常退出的,如果是,它会返回一个非零值。