這兩天,因為工作地需要做一些的多進程的工作,看了網上的一些例子,多是通過管道文件的方式來 實現的,後來想想也不用這麼麻煩...
下面是一個多進程後台掛起的一個簡單的例子,原理大概如下,先在後台掛起一定數量的進程,當正 在執行的進程數超過一定數值後,暫停任務分配,睡眠一定時間,若後台進程數小於你設定的數值後,繼 續任務分配。
其實是不是也很簡單...
################ change the var bill to fix ######################################### ################ change the pro to multi process #################################### ################ yijy 2009.4.26 modified ############################################ InDir="/in" OutDir="/out" CurCmd="varfixf" du ${OutDir} rm ${OutDir}/* du ${OutDir} totalInDir=`find ${InDir} -type f | wc -l` curDir=`pwd` if [ ! ${totalInDir} ] then echo "APP:MSG:There is no file in the in dir ... " exit else echo "APP:MSG:Start to convert ... " currentBinNum=0 find ${InDir} -type f | while read file do currentBinNum=`ps -ef | grep ${FEDX_HOME} | grep ${CurCmd} | grep ${curDir} |wc -l` /*統計後台掛起的數目*/ echo "APP:MSG:Backgroud num : "${currentBinNum} while [ ${currentBinNum} -gt 30 ] /*如果掛起數目大於30,這個掛起數值可以自定 義,程序暫停,睡眠,睡眠之後繼續檢測後台掛起的數目*/ do sleep 1 echo 'sleeping ...' currentBinNum=`ps -ef | grep ${FEDX_HOME} | grep ${CurCmd} | grep ${curDir} |wc -l` done filename=`basename $file` varfixf ${curDir}/${InDir}/${filename} ${curDir}/${OutDir}/${filename} > /dev/null & done echo "APP:MSG:Convert over ... " fi