我创建了一个监视子进程并在它失败或退出时重新启动它的基本示例。这样做的首选/更强大的方法是什么?持续轮询状态变化是一种好习惯吗?我的理解是我应该使用类似的东西,SIGCHLD
但找不到任何好的例子。
我主要是嵌入式 C 编码器,这是我第一次尝试理解fork()
. 该代码的目的最终将是监视对另一个程序的调用,exec()
并在它失败或完成时重新启动该程序。
编辑:
在@cnicutar 发表评论后,我以一种我认为更有意义的方式重写了下面的示例,希望以后对某些人有用。我希望父母在处理其他事情的同时监控子进程,并在子进程失败/完成时对exec
新进程进行新的调用。fork
我想尝试使用 unix 信号来实现这一点
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
int main(int argc, char *argv[])
{
pid_t cpid;
int status;
cpid = fork();
for (;;)
{
switch (cpid)
{
case -1 : //Fork failure
exit(EXIT_FAILURE);
break;
case 0 : //Child Process
exec(some function);
return 0; //exit child process
break;
default : //Parent process
if (waitpid(-1, &status, WNOHANG) != 1) cpid = fork(); //restart
//Do parent stuff here...
break;
}
}
}