shell 併發

#!/usr/bin/ksh

# SCRIPT: ptest.sh

# AUTHOR: Ray001

# DATE: 2008/10/03

# REV: 2.0

# For STUDY

#

# PURPOSE:

# 實現進程併發,提高執行效率,同時能記錄每個執行失敗的子進程信息



#定義併發進程數量

PARALLEL=3

#定義臨時管道文件名

TMPFILE=$.fifo

#定義導出配置文件全路徑名

CMD_CFG=$HOME/cfg/ptest.cfg

#定義失敗標識文件

FAILURE_FLAG=failure.log



####################### 函數定義 ########################

# 中斷時kill子進程

function trap_exit

{

kill -9 0

}



# 通用執行函數

exec_cmd()

{

   # 此處爲實際需要執行的命令,本例中用sleep做示例

       sleep ${1}

   if [ $? -ne 0 ]

   then

       echo "命令執行失敗"

       return 1

   fi

}



trap 'trap_exit; exit 2' 1 2 3 15


#清理失敗標識文件

rm -f  ${FAILURE_FLAG}


#爲併發進程創建相應個數的佔位

mkfifo $TMPFILE

exec 4<>$TMPFILE

rm -f $TMPFILE

{

       count=$PARALLEL

       while [ $count -gt 0 ]

       do

               echo

               let count=$count-1

       done

} >&4


#從任務列表 seq 中按次序獲取每一個任務

while read SEC

do

       read <&4

        (  exec_cmd ${SEC} || echo ${SEC}>>${FAILURE_FLAG} ; echo >&4 ) &

done<$CMD_CFG

wait

exec 4>&-


#併發進程結束後判斷是否全部成功

if [ -f ${FAILURE_FLAG} ]

then

       exit 1

else

       exit 0

fi


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章