back inux round tao top 修改 spa blog
转自 http://blog.csdn.net/wangtaoking1/article/details/9838571
主要记录一下 Shell 脚本中的命令的并发和串行执行。
默认的情况下,Shell 脚本中的命令是串行执行的,必须等到前一条命令执行完后才执行接下来的命令,但是如果我有一大批的的命令需要执行,而且互相又没有影响的情况下(有影响的话就比较复杂了),那么就要使用命令的并发执行了。
看下面的代码:
- #!/bin/bash
- for(( i = 0; i < ${count}; i++ ))
- do
- commands1
- done
- commands2
对于上面的代码,因为每个 commands1 都挺耗时的,所以打算使用并发编程,这样就可以节省大量时间了。
修改后的代码如下:
- #!/bin/bash
- for(( i = 0; i < ${count}; i++ ))
- do
- {
- commands1
- }&
- done
- commands2
这样的话 commands1 就可以并行执行了。 实质是将 commands1 作为后台进程在执行,这样主进程就不用等待前面的命令执行完毕之后才开始执行接下来的命令。
但是我的本来目的是让 commands1 的这个循环都执行结束后,再用 command2 去处理前面的结果。如果像上面这样写的话,在 commands1 都还没结束时就已经开始执行 commands2 了,得到了错误的结果。
再次修改代码如下:
- #!/bin/bash
- for(( i = 0; i < ${count}; i++ ))
- do
- {
- commands1
- }&
- done
- wait
- commands2
上面这样就可以达到预期的目的了,先是所有的 commands1 在后台并行执行,等到循环里面的命令都结束之后才执行接下来的 commands2。
对于上面的代码,如果 count 值特别大的时候,我们应该控制并发进程的个数,不然会影响系统其他进程的运行,甚至死机。
接下篇:Shell 脚本中的并发(2)
参考:linux shell 编程多线程和 wait 命令学习
Shell 脚本中的并发(转)
来源: http://www.bubuko.com/infodetail-2251425.html