控制shell脚本并发进程数
shell命令后面加&,可以让这条shell命令异步的执行。例如:
sleep 10 &
执行这条命令后,并不会阻塞10秒,而是立即返回。
如果将这种方法用在while循环中,则可以实现多进程并行处理。例如,test.sh文件为:
while read line; do sleep 10 & done
在执行ls -l | test.sh 时,会有多个进程并行启动,进程数等于ls -l返回结果的行数。
而有时为了避免并发进程数过多,导致机器卡死,需要限制并发的数量。以下代码实现了该功能:
while read line; do joblist=($(jobs -p)) while (( ${#joblist[*]} >= 20 )) do sleep 1 joblist=($(jobs -p)) done sleep 10 & done
这样,可以将并发进程数控制在20个。
Date: 2013-03-12 17:24:59 CST
HTML generated by org-mode 6.21b in emacs 23