2017-06-21 58 views
1

我正在嘗試編寫一個腳本,它將從主腳本中並行運行n個並行進程。正在運行的進程的數量應始終爲n,但每個進程的執行時間可能會有所不同。如何產生n個進程並在完成使用bash後啓動另一個進程?

例如,我啓動了三個使用pid:1,2和3的進程。當三個進程中的一個結束時,我想開始一個新進程。如果2點結束第一,我會釀出關閉過程4使運行的PID的將是:1,3,和4

我認爲其中等待使用命令,直到所有的工作已經完成了其他問題。就我而言,我不想等到每個工作都要完成纔會繼續,就像其中一個正在運行的工作完成時一樣。

+1

您仍然可以超時電源使用等待命令,直到一個進程完成,然後繼續... –

+0

我一直在等待,直到所有進程完成。 – mrowe

+1

'wait'內建有多種操作模式。在bash中鍵入'help wait' – hek2mgl

回答

1
wait -n `jobs -p` 

似乎要做的工作。感謝l'L'l和hek2mgl的指導。

0

除了使用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內核的過程中,指定並行處理等

相關問題