【发布时间】:2016-11-16 08:53:12
【问题描述】:
我有一个使用 processBuilder 执行 myscript.sh 的 java restful 服务方法。我的脚本接受一个输入(例如 - myscript.sh /path/to-a/folder)。 在脚本里面是这样的
-> execute a command which is multithreaded i.e parallel processing
-> echo "my message"
现在,当从 linux 命令行调用我的脚本时,它执行得很好。首先所有线程运行完成,然后在终端上显示线程命令执行的一些文本输出,然后显示我的消息。
但是当我使用 processBuilder 从 java 调用相同的脚本时,最后一条回显消息立即出现并且执行结束。
按照我从 java 调用脚本的方式
ProcessBuilder processBuilder = new ProcessBuilder("/bin/bash","/path/to/myscript.sh","/path/to/folder/data");
Process proc = processBuilder.start();
StringBuffer output = new StringBuffer();
BufferedReader reader = new BufferedReader(new InputStreamReader(proc.getInputStream()));
String line = "";
while((line = reader.readLine()) != null){
output.append(line + "\n");
}
System.out.println("### " + output);
我不知道发生了什么,如何调试也。 有人可以告诉我如何在从终端或从 java processBuilder 运行时从 shell 脚本中获得相同的行为吗?
【问题讨论】:
-
你能发布你的脚本在做什么吗?上面看起来不错,除非有一些异常处理。
-
您是否在 shell 脚本的后台运行任何可执行文件?如果是这样,您的脚本可能在完成之前就返回了......因此会杀死可执行文件(或使其成为孤立的)。
-
您希望脚本在其并行工作完成之前一直阻塞吗?还是没有等待脚本完成的 Java 代码?
标签: java multithreading bash process