我有一个java restful服务方法,它使用processBuilder执行myscript.sh。我的脚本需要一个输入(例如 - myscript.sh/path/to-a /文件夹)。 里面的脚本是这样的如何等待多线程shell脚本执行完成后在我的web服务中调用?
-> 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脚本内运行任何可执行文件?如果是这样,你的脚本可能会在它结束之前返回...并因此杀死可执行文件(或者让它成为孤儿)。 – blackpen
您是否希望脚本在完成其平行工作之前被阻止?还是不等待脚本完成的Java代码? – alok