我正在嘗試編寫一個腳本,它將從主腳本中並行運行n個並行進程。正在運行的進程的數量應始終爲n,但每個進程的執行時間可能會有所不同。如何產生n個進程並在完成使用bash後啓動另一個進程?
例如,我啓動了三個使用pid:1,2和3的進程。當三個進程中的一個結束時,我想開始一個新進程。如果2點結束第一,我會釀出關閉過程4使運行的PID的將是:1,3,和4
我認爲其中等待使用命令,直到所有的工作已經完成了其他問題。就我而言,我不想等到每個工作都要完成纔會繼續,就像其中一個正在運行的工作完成時一樣。
我正在嘗試編寫一個腳本,它將從主腳本中並行運行n個並行進程。正在運行的進程的數量應始終爲n,但每個進程的執行時間可能會有所不同。如何產生n個進程並在完成使用bash後啓動另一個進程?
例如,我啓動了三個使用pid:1,2和3的進程。當三個進程中的一個結束時,我想開始一個新進程。如果2點結束第一,我會釀出關閉過程4使運行的PID的將是:1,3,和4
我認爲其中等待使用命令,直到所有的工作已經完成了其他問題。就我而言,我不想等到每個工作都要完成纔會繼續,就像其中一個正在運行的工作完成時一樣。
wait -n `jobs -p`
似乎要做的工作。感謝l'L'l和hek2mgl的指導。
除了使用wait等,你可以使用gnu semaphore/parallel來實現強大的作業控制,如果你不介意打破純粹的bash buildins並安裝一個包。
# sem can emulate a counting semaphore. Use --jobs to set the number of toilets like this:
sem --jobs 3 --id my_id -u 'echo Start 1; sleep 5; echo 1 done' &&
sem --jobs 3 --id my_id -u 'echo Start 2; sleep 6; echo 2 done' &&
sem --jobs 3 --id my_id -u 'echo Start 3; sleep 7; echo 3 done' &&
sem --jobs 3 --id my_id -u 'echo Start 4; sleep 8; echo 4 done' &&
sem --wait --id my_id
#輸出:
Start 1 Start 2 Start 3 1 done Start 4 2 done 3 done 4 done
https://www.gnu.org/software/parallel/parallel_tutorial.html
它還具有控制每個CPU內核的過程中,指定並行處理等
您仍然可以超時電源使用等待命令,直到一個進程完成,然後繼續... –
我一直在等待,直到所有進程完成。 – mrowe
'wait'內建有多種操作模式。在bash中鍵入'help wait' – hek2mgl