我正在尝试与当前进程并行执行另一个命令行进程。但是,我意识到命令行程序有时会异常退出,这也会杀死我的主程序。
// 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);
}
有什么方法可以让我的主程序在命令行程序异常死机后继续运行?谢谢!
[更新]:是的,主进程正在写入命令行正在读取的文件,但它是一个普通文件,而不是管道。我收到一个段错误。
我很难重现这个错误,因为子进程不会经常崩溃。但它确实发生了。随机崩溃是命令行程序中的一个已知错误,这就是为什么即使命令行死了我也要让我的主程序保持事件状态。
最佳答案
在你的真实代码中你有一个 else 吗:
if (pid == 0) {
int rc = execv("command line program...", argv);
// possibly more child stuff
}
else {
// parent stuff
}
在这里提问时发布真实代码总是一个好主意。
关于c++ - 如果父/子异常退出,则使 fork 进程保持事件状态 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5969418/