正常情况下,Shell脚本中的命令是串行执行的,当一条命令执行完才会执行接下来的命令。比如下面这段代码:
#!/bin/bash
for i in {1..10};do
echo $i
done
echo "END"
执行结果:
1
2
3
4
5
6
7
8
9
10
END
对代码进行改进,增加&后台运行和wait命令:
#!/bin/bash
for i in {1..10};do
echo $i &
done
wait
echo "END"
在并发执行时不能保证命令的执行顺序,而且本应在整个循环执行结束之后再执行的echo "END"命令,却在程序一开始就被执行了。所以在并发执行时,我们通常都需要保证在循环体中的所有命令都执行完后再向后执行接下来的命令,这时就可以使用 wait命令来实现。在Shell中使用wait命令,相当于其它高级语言里的多线程同步。
wait 等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0
bash test.sh
6
7
2
3
4
8
9
10
5
1
END
执行正常