阿里山QQ

导航

linux shell并发执行命令

一般我们在linux上十一shell命令的批量执行操作,一般使用for或者while 循环进行操作,但是这样有一个问题,for或者while本质上是串行的,并不能,如果某一个命令执行耗费的时间比较长,就会等待很长的时间,很浪费时间;

将被执行的命令运行为后台执行,可以实现并发执行多条命令;

1
for ((i=0;i<10;i++));do echo "done ";done &  wait

  

但是上述方法,如果在i的值很大的时候,会产生大量的进行,造成系统严重的问题,所以,需要控制进行数,下面的脚本会保证同一时间只有10个进程在运行;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
[root@linux-node1 ~]# cat parallel.sh
#!/bin/sh
 
tempfifo=$$.fifo
echo $tempfifo
trap "exec 100>&-;exec 1000<&-;exit 0" 2
mkfifo $tempfifo
exec 1000<>$tempfifo
rm -rf $tempfifo
 
for ((i=0;i<10;i++))
do
   echo >&1000
done
 
for((i=0;i<300;i++))
do
read -u1000
{
   sleep 5
   echo "Done!"
   echo $i
   echo >&1000
}&
echo "--------------"
done
wait
 
echo "done !!!!!!!!!"

  

posted on   阿里山QQ  阅读(5223)  评论(0编辑  收藏  举报

努力加载评论中...
点击右上角即可分享
微信分享提示