2011-05-27 19 views
22

是否有可能在bash腳本中使用線程。我在java中有一個驅動類,我試圖同時運行多個實例。我知道這樣做的唯一方法是在bash中創建線程,但我不確定這是否可行。任何幫助,將不勝感激bash中的線程?

+1

你可以在後臺運行的一些東西用'&' – Ibu 2011-05-27 18:57:14

回答

27

擊不支持線程本身,而是你可以在後臺啓動多個Java進程,如:

java myprog & 
java myprog & 
java myprog & 

任何比你可能會考慮Python或Ruby以上,其中有線程管理工具,您可以等待每一個完成並收集輸出/退出狀態等

編輯:中借鑑@CédricJulien建議使用wait,這裏有一個更深入的例子。鑑於這種MyProg.java程序:

public class MyProg { 
    public static void main(String[] args) { 
     System.exit(Integer.parseInt(args[0])); 
    } 
} 

你可以編寫以下bash-threads.sh腳本啓動它的多個實例並行:

#!/bin/bash 
set -o errexit 

java MyProg 1 & 
pid1=$! 
java MyProg 0 & 
pid2=$! 
java MyProg 2 & 
pid3=$! 

wait $pid1 && echo "pid1 exited normally" || echo "pid1 exited abnormally with status $?" 
wait $pid2 && echo "pid2 exited normally" || echo "pid2 exited abnormally with status $?" 
wait $pid3 && echo "pid3 exited normally" || echo "pid3 exited abnormally with status $?" 

它的輸出是:

pid1 exited abnormally with status 1 
pid2 exited normally 
pid3 exited abnormally with status 2 
26

你不會能夠啓動一些「bash線程」,但是你可以在bash中啓動子進程,只需在命令後面使用&,它會在後臺啓動它流程。

在啓動進程以等待它們完成後調用wait

試試這個

first_command & 
second_command & 

wait 
+1

如果我可以檢查他們兩個我會的。兩個答案都很完美,但他之前就是這樣。 – auwall 2011-05-27 19:31:32

+0

優秀!我不知道-wait命令。謝謝! – hhaamm 2015-03-26 15:57:47