我正在尝试与当前进程并行执行另一个命令行进程。但是,我意识到命令行程序有时会异常退出,这也会杀死我的主程序。

// 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);
}

命令行程序异常终止后,有什么方法可以使我的主程序运行?谢谢!

[更新]:是的,主要过程是写入要从中读取命令行的文件,但这是普通文件,而不是管道。我收到段错误。

对我来说,重现该错误非常困难,因为子进程不会经常崩溃。但这确实发生了。随机崩溃是命令行程序中的一个已知错误,这就是为什么即使命令行死了,我也要保持主程序运行的原因。

最佳答案

在您的真实代码中,这里还有别的:

if (pid == 0) {
    int rc = execv("command line program...", argv);
    // possibly more child stuff
}
else {
    // parent stuff
}

在此处提问时,发布真实代码始终是一个好主意。

09-04 02:17
查看更多