运行 从 Java 使用 Runtime.exec 处理 - 退出代码 139

Run process from Java with Runtime.exec - exit code 139

我想 运行 来自 Java 的 C++ 程序 Linux

Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("/home/user/myProgram inputFilePath secondArgument");
int exitVal = pr.waitFor();

如果我 运行 来自终端的相同命令一切正常,问题是当我 运行 来自 Java 时。我收到退出代码 139。程序已执行,但执行时出现故障。实际上,如果我不输入 inputFilepath,程序执行得很好,我可以通过标准输出捕获有关 "missing input file".

的消息

有什么想法吗?

解决方案:经过反复试验,我发现了问题所在。显然在参数的末尾需要一个“\n”,可能被我 运行ning 的 C++ 程序用作标志。解析参数时肯定存在分段错误。

您是否在 Linux 控制台中检查了此命令 returns 的内容?尝试 运行 "/home/user/myProgram inputFilePath secondArgument; echo $?"。 139 on exit 表示命令返回 139,这不是您的 Java 代码的问题。

139 是您在 C++ 程序因分段错误而崩溃时看到的退出代码。这表明 C++ 程序中存在内存访问错误。参见 Are there any standard exit status codes in Linux?

或者,程序可能出于自身原因以退出代码 139 退出。不知道程序是什么,真的不可能更具体。