shell脚本模拟多进程
时间:2010-09-25
来源:ubuntuer
在手机上看
手机扫描阅读
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
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
以前工作的时候经常需要从几百台机器拷贝数据,如果一台一台的拷贝要话很长时间,所有的机器一起拷贝的话对拷贝到的目标机器压力又很大,就拿这中方法来跑了。
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28