shell脚本模拟多进程

shell脚本中开多个进程没什么困难,需要解决的问题是怎么控制同时运行的进程数目。为此,创建一个命名管道(fifo),在初始时, 向其中灌入SUB_PROCESS_NUM行数据,SUB_PROCESS_NUM为并发的进程数。每个子进程在运行钱,从fifo中读入一行数据,如果 fifo中已经北邮数据的话,进程就被阻塞在read操作上;子进程运行结束后,想fifo中灌入一行数据,这样下个进行就可以运行了。

一个例子如下,run函数代表子进程的操作:

Bash语言:
#!/bin/bash

SUB_PROCESS_NUM=10

tmpfile="$$.fifo"
mkfifo $tmpfile
exec 6<>$tmpfile
rm -f $tmpfile
for((i=1;i<=10;i++));do echo "init sub job $i.";done >&6


function run(){
    sleep 100;
}

for ((i=0;i<100;i++)); do
    read line
    echo "$line"
    (run; echo "sub job $i finished.") >&6 &
done <&6

以前工作的时候经常需要从几百台机器拷贝数据,如果一台一台的拷贝要话很长时间,所有的机器一起拷贝的话对拷贝到的目标机器压力又很大,就拿这中方法来跑了。

作者: ubuntuer   发布时间: 2010-09-25