cat nothing.sh
#!/bin/bash
sleep 5 //发呆5秒
echo `date` //输出当前系统日期
好,那么这件事我要做1000次,那么for循环走起:
#!/bin/bash
for i in `seq 1000`
do
sh nothing.sh
done
exit 0#!/bin/bash
tmp_fifofile="/tmp/$$.fifo"
mkfifo $tmp_fifofile //新建一个fifo类型的文件
exec 6<>$tmp_fifofile //将标示符(fd6)指向fifo类型文件
rm -rf $tmp_fifofile //可删可不删
thread=1000 //这里定义了我需要多个进程去干活
for ((i=0;i<$thread;i++))
do
echo ""
done >&6 //就是在fd6中放置了$thread个空行
for ((i=0;i<1000;i++)) //1000次循环,开了1000个进程
do
read -u6 // 一次read -u6 就从fd6中去掉一个空行,然后向下执行,如果fd6中的空行没有了,就停在这里等待位置,从而实现了进程数量的控制。所以如果 我thread的值设为50个,那么其实我就是在用这50个进程就干活,如果进程开满了,就不会再开新的进程,如果旧的进程结束了,那么就会有新的进程进来继续干活。
{
sh nothing.sh //这里是我需要干什么活
echo "">&6 //每个进程结束后,向fd6返回一个空行,告诉它, 我的活干完了,我的位置腾出来。
} & //命令是放在后台执行的
done
wait //等待所有后台进程结束
exec 6>&- //关闭fd6
exit 0
原文:http://blog.csdn.net/apache0554/article/details/43085143