2011-01-24 13:47

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

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

  1. #!/bin/bash 
  2.  
  3. PATH=/bin:/sbin:/usr/bin:/usr/sbin 
  4. export PATH 
  5.  
  6. # job msg log temp file 
  7. MSG_LOG=/tmp/job_log 
  8. rm -f $MSG_LOG 
  9.  
  10. # background job function 
  11. bg_job(){ 
  12.    JOB=$1 
  13.    sleep $JOB 
  14.    echo $JOB "End" >> $MSG_LOG 
  15. } 
  16.  
  17.  
  18. JOB_LIST=( 
  19.    "5" 
  20.    "6" 
  21.    "3" 
  22.    "4" 
  23. ) 
  24. # run all job 
  25. for FLASH in "${JOB_LIST[@]}" ; do  
  26.    bg_job $FLASH & 
  27. done 
  28.  
  29.  
  30. # Waiting for the end of all the job 
  31. while [ "j$(jobs -r)" != "j" ] ; do 
  32.    sleep 1 
  33. done 
  34.  
  35. # show job msg 
  36. cat $MSG_LOG 
  37. echo "<< bg_job all complete >>" 
  38.  
  39. exit 0; 

0 回應: