我使用Processbuilder如下:
List<String> args = initArgs();
ProcessBuilder pb = new ProcessBuilder(args);
tdmServerProcess = pb.start();
handleInfoLog(tdmServerProcess.getInputStream());
handleErrorLog(tdmServerProcess.getErrorStream());
在initArgs
方法中,我设置了我想要执行的linux命令,如下所示:
args.add("java -version");
args.add(javaHome + File.separator + "bin" + File.separator + "java");
第一个命令正在成功执行。但第二个是失败并出现以下错误:
/ opt / java7 / bin / java:无法执行二进制文件
虽然我有执行权限,但以下是权限位:
-r-xr-xr-x
我可以从终端执行相同的命令。
答案 0 :(得分:1)
错误“无法执行二进制文件”表示java文件无效。
也许'java -version'实际上是从你路径中的另一个位置运行java,而/ opt / java7 / bin / java是无效的。尝试手动运行'/ opt / java7 / bin / java',并检查结果。
通过使用运行java代码的用户运行which java
来检查路径中java的位置。
答案 1 :(得分:0)
您显然正在尝试执行两个单独的命令,首先是“java -version”,然后是“/ opt / java7 / bin / java”?
这不是它的工作原理。而是附加所有参数并启动一个过程。在您的情况下,命令是“java -version / opt / java7 / bin / java”
尝试在控制台上运行它 - 我打赌你会得到同样的错误。