使用system("./some_program"),当"some_program"死亡时,如何防止父进程终止?
Using system("./some_program"), how to prevent termination of parent process when "some_program" dies?
在Linux下,我有一个调用外部程序(编译的Fortran程序)的C++代码。此外部程序有时会中止(即,当满足某些条件时,在其代码中发出"STOP"),这是可以的。 但是:外部程序终止也会杀死父程序C++程序。 我希望C++代码继续运行,即使外部程序正常或异常停止执行。
C++"父"程序使用 system("./external_program") 执行外部程序。
[注意:是的,我知道使用 system() 有安全问题,但目前与我无关]
谢谢
一般信息:C++程序使用 MPI 进行并行执行,并启动外部程序的 N 个并行实例 - 每个实例都在自己的目录中。
两个程序终止时的错误消息: 主作业正常终止,但 1 个进程返回非零退出代码。根据用户指示,作业已中止。
mpirun 注意到节点 Ashton 上 PID 为 0 的进程等级为 18,在信号 6 上退出(中止)。
好消息:问题解决了! 按照 Lyngmo 的建议@Ted,我基本上编写了 2 个新代码,假设模仿原始 2 个代码的操作,这些代码太大而无法提取最小的可重现示例。令人惊讶的是,新示例中没有出现该问题!这当然告诉我,主程序终止的原因不是外部程序中的中止信号。
溶液: 简而言之,在确保出现可重现的错误(使用 MPI 进行调试超出了我的范围)后,我启动了 gdb 并以串行模式仔细分析了原始代码。我发现该程序试图访问一个未初始化的向量,这导致了"out_of_range"错误,父程序立即退出。这让我感到困惑的原因是,当外部程序中止时,这种取消初始化就会发生 - 这就是为什么我认为它与外部程序的实际终止过程有关,而问题要简单得多。
谢谢大家!
- Monty Hall program c++
- "Program ended with exit code: 0"出现在我的输出的开头?
- LCM program in C++
- 为什么 C++ 编译器在"c:program filesgnu emacsinclude"中查找包含文件?
- 为什么以下代码块提供输出"ZZZ(some garbage value)"而不是"ZZ(some garbage value)"
- 错误:在类型 "blah blah" 的绑定引用中删除限定符以初始化"some other blah blah"
- 如何称呼表达式"T (&some(...))[2]' 其中 T=字符
- 在 EAX 模式下加密数据时"program has stopped working"
- 为什么删除执行组件指针会导致"Program.exe has triggered a breakpoint"
- for(;;) vs do..while() for main program loop
- 为什么GCC可以编译std::exception("some error msg")而没有错误?
- C++ "Program has stopped working" - ROT-107(凯撒密码)
- OS X Eclipse C++ "Program File Does Not Exist"
- 在 Eclipse.It 中运行C++代码时出错,'Your program cannot output..'
- 如何设置Visual Studio来调试DLL ("Unable to start program error")
- 标准Windows 7用户如何能够删除C:Program Files下的文件
- 控制台在打印char*some输出时停止
- xlC 警告,"The NOSTRICT option has the potential to alter the semantics of a program"
- 树莓派"error: stray 255 in program"
- 错误"<url> is not recognized as an internal or external command, operable program or batch file.