2011-01-24

[Shell] 等待所有子程序結束

當在用 shell 開其他子程序時,通常會希望在所有程序結束時做一些處理,最簡單的方式就是用一支迴圈去等待其他子程序的結束,這裡用到 jobs 這個指令去檢查子程序是不是還在執行。

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin
export PATH

# job msg log temp file
MSG_LOG=/tmp/job_log
rm -f $MSG_LOG

# background job function
bg_job(){
    JOB=$1
    sleep $JOB
    echo $JOB "End" >> $MSG_LOG
}


JOB_LIST=(
    "5"
    "6"
    "3"
    "4"
)
# run all job
for FLASH in "${JOB_LIST[@]}" ; do 
    bg_job $FLASH &
done


# Waiting for the end of all the job
while [ "j$(jobs -r)" != "j" ] ; do
    sleep 1
done

# show job msg
cat $MSG_LOG
echo "<< bg_job all complete >>"

exit 0;

0 回應: