我正在運行GNU bash,版本爲3.2.39(1)-release(x86_64 -pc-Linux的GNU)。 我有一個關於等待在子shell中運行的作業的具體問題,根據我想要允許的最大並行進程數,然後等待剩下的子shell作業完成,然後在執行下一步之前完成管道(如果我在這裏做適當意義上的)..在bash中等待作業,允許同時進行有限的並行作業,然後爲所有作業完成以繼續處理其餘的管道
從本質上講,我的僞代碼如下所示:
MAX_PROCS=3
for ((k = 0 ; $k < $kmerlen ; k += 1))
do
(
### Running a perl script here for each k (this script is a memory hog)...
)&
while [ $(ps -e | grep 'perlScriptAbove' | grep -v grep | wc -l) -gt ${MAX_PROCS} ] ;
do
wait
done
done
###wait <- works fine without this wait, but I need all kmerlen jobs to finish first to proceed to the next part of the pipeline
## Run the rest of the pipeline...
在while循環的第一個等待語句工作正常產卵3級的工作,但是當我使用下一個等待聲明,該屬性丟失,產生的子彈的數量等於我的kmerlen
我很抱歉,如果這已被回答,但我似乎沒有找到一個。
非常感謝。
看看這個帖子。它可以幫助:[如何限制數量的線程 - 在一個功能在bash](http://stackoverflow.com/questions/6511884/how-to-limit-number-的線程使用的功能於一個功能合的bash /)。 – Lynch
帶有max-procs參數的xargs對我來說是新的 - 非常尖銳!從現在開始,這將進入我的工具箱 - 非常感謝! – SirishaS