简单的shell多进程 (后台运行方式)

本文介绍了一个简单的多进程任务调度方案,通过在后台挂起一定数量的进程并动态调整任务分配来避免资源过载。当执行中的进程数超过预设阈值时,系统将暂停任务分配并进入睡眠状态,直至进程数减少后再继续。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    这两天,因为工作地需要做一些的多进程的工作,看了网上的一些例子,多是通过管道文件的方式来实现的,后来想想也不用这么麻烦...

   下面是一个多进程后台挂起的一个简单的例子,原理大概如下,先在后台挂起一定数量的进程,当正在执行的进程数超过一定数值后,暂停任务分配,睡眠一定时间,若后台进程数小于你设定的数值后,继续任务分配。

   其实是不是也很简单...  

 

################ 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值