[SHELL] shell 實現多程式後,如何等待所有程式結束

李空空發表於2018-08-11

1> 多程式實現 :主要方法是使用 & 符號,將命令fork到後臺執行

2>等待結束的方法:

    2.1、使用 wait 命令

#!/bin/bash

sleep 10 && echo "1" >> s.lock &
sleep 12 && echo "1" >> s.lock &
sleep 8  && echo "1" >> s.lock &
while [[ $(cat s.lock | wc -l) < "3" ]]; do
sleep 1
done
echo "over"

    2.2 當你使用for in ; do done的方式建立多程式的時候,用wait 命令會失敗,曲線救國方法是建立一個標誌,週期檢查

#!/bin/bash

set -e 
WAIT_LOCK="/tmp/wait.lock"
wait_it(){
    tmp_lock=$2
    if [[ -f $tmp_lock ]]; then
        rm $tmp_lock
    touch $tmp_lock
    #數檔案記錄,只要記錄數大於等於程式數,表明執行結束
    while [[ $(cat $tmp_lock | wc -l) < $1 ]]; do
        echo "*"
        sleep 10
    done
}

#開啟10個程式,每個程式成功就向檔案追加一條記錄
for i in {1..10}; do echo $i ; ( sleep $i && echo "1" >> $WAIT_LOCK & ); done
wait_it 10 $WAIT_LOCK
echo "Over!"

 

相關文章