【发布时间】:2011-08-23 14:07:20
【问题描述】:
我正在尝试与当前进程并行执行另一个命令行进程。但是,我意识到命令行程序有时会异常退出,这也会杀死我的主程序。
// 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);
}
在命令行程序异常死机后,有什么方法可以让我的主程序继续运行?谢谢!
[UPDATE]:是的,主进程正在写入命令行正在读取的文件,但它是一个普通文件,而不是管道。我收到一个段错误。
我很难重现这个错误,因为子进程不会经常崩溃。但它确实发生了。随机崩溃是命令行程序中的一个已知错误,这就是为什么我想让我的主程序保持活动状态,即使命令行死了。
【问题讨论】:
-
根据您发布的内容,我不明白为什么您的主程序会死掉。这是真的发生还是您担心会发生什么?
-
除非父子进程以某种方式交互,否则子进程的死亡不太可能影响父进程。父母是否通过管道从/向孩子读/写?您可能收到 SIGPIPE 信号吗?还是其他信号?
-
@Duck,但它确实发生了......所以你认为这是正确的做法吗?
-
@Luther Blissett:感谢您的回复。是的,主进程正在写入命令行正在读取的文件,但它是一个普通文件,而不是管道。我收到一个段错误。
-
@usfish:你在使用文件锁定吗?
标签: c++ linux process exec fork