這兩天,因為工作地需要做一些的多進程的工作,看了網上的一些例子,多是通過管道檔案的方式來 實現的,後來想想也不用這麼麻煩...
下面是一個多進程後台掛起的一個簡單的例子,原理大概如下,先在後台掛起一定數量的進程,當正 在執行的進程數超過一定數值後,暫停任務分配,睡眠一定時間,若後台進程數小於你設定的數值後,繼 續任務分配。
其實是不是也很簡單...
################ 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 ... " exitelse 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