我正在尝试与当前进程并行执行另一个命令行进程。但是,我意识到命令行程序有时会异常退出,并且也会杀死我的主程序。
// MAIN PROGRAM
pid = fork();
char *argv[] = { stuff.. };
if (pid == 0) {
int rc = execv("command line program...", argv);
}
// DO OTHER STUFF HERE.
if (pid > 0) {
waitpid(pid, 0, 0);
}
在命令行程序异常死亡后,有没有办法让我的主程序继续运行?谢谢!
[更新]:是的,主要进程是写入命令行正在读取的文件,但它是普通文件,而不是管道。我收到了段错误。
我很难重现错误,因为子进程不会经常崩溃。但它确实发生了。随机崩溃是命令行程序中的一个已知错误,这就是为什么我想保持我的主程序活着,即使命令行死了。
答案 0 :(得分:1)
在您的真实代码中,您还有其他地方:
if (pid == 0) {
int rc = execv("command line program...", argv);
// possibly more child stuff
}
else {
// parent stuff
}
在这里提问时,发布实际代码总是一个好主意。
答案 1 :(得分:1)
vfork
而不是fork
来避免不必要的进程克隆。SIGCHLD
时不会崩溃。// DO OTHER STUFF HERE.
注释execv
失败的代码。gdb
。它会告诉你发生崩溃的地方。