我有一個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