c++ - 如果父/子异常退出,则使 fork 进程保持事件状态 (C++)

标签 c++ linux process exec fork

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

// 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/

相关文章:

c++ - 实现集合覆盖数据结构

c++ - 从一个字节中获取 n 位

c++ - 从基类继承函数声明中参数的默认值

c++ - pthread_cond_broadcast 是如何工作的?

Python unicode 在 OSX 上适用于 2.6.1,但在 Ubuntu 上不适用于 2.6.5

java - 在进程内实现独立通信

process - 计算 Minix 中的进程数

c++ - 强制编译器选择 const 运算符重载

linux - 在运行 Linux 的 Cray 系统上,如何在自动 BASH 脚本中使用 aprun 提交多个 qsub 请求?

process - 无法通过管道多次传入或传出生成的子进程