Linux shell wait的用法
#! /bin/bash
##启动后台子任务
# 在执行命令后加&操作符,表示将命令放在子shell中异步执行。可以达到多线程效果。
# 等待2秒,再执行下一个操作
sleep 2
echo "等待了2秒钟才到这"
# 当前shell不等待,后台子shell等待
sleep 10 &
echo "这个就不用等,直接到这"
## wait
# 等待作业号或者进程号制定的进程退出,返回最后一个作业或进程的退出状态状态。如果没有制定参数,则等待所有子进程的退出,其退出状态为0.
# 如果是shell中等待使用wait,则不会等待调用函数中子任务。在函数中使用wait,则只等待函数中启动的后台子任务。(例2)
# 例1
echo "等待最大值(10秒)之后退出"
sleep 5 &
sleep 10&
sleep 1 &
# 等待10秒后,退出
wait
echo "等待上个子进程(2秒)后退出"
sleep 1 &
sleep 3 &
sleep 2 &
# $! 表示Shell最后运行的后台Process的PID
# 在这里就是表示上个子进程的进程号,wait等待上个子进程2秒后,退出
wait $!
#例2
fun(){
echo "fun wait is begin.timeNum:$1"
local timeNum=$1
sleep $timeNum &
# 这个只等待wait前面sleep
#wait
echo "fun wait is end.timeNum:$timeNum"
}
fun 10 &
fun 20 &
# 如果fun里面没有wait,则整个脚本立刻退出,不会等待fun里面的sleep
wait
echo "all is ending"