来自:https://blog.csdn.net/like_LeafFlying/article/details/72356329
异步执行
有时我们希望同时执行多项任务,这其中涉及到父脚本以及多个子脚本的加载问题,子脚本可以在父脚本运行时执行其他额外的任务。但是,当一系列脚本以这种方式运行时,保证父脚本与子脚本的协调一致就会是一个问题。试想下这样一种情况,如果父脚本与子脚本互相依赖,一个脚本必须等待另一个脚本任务完成才能继续自己的任务。
针对以上情形,bash提供了一个内置的命令来帮助管理异步执行。wait命令可以让父脚本暂停,直到指定的进程(比如子脚本)结束。
wait命令
下面通过两个例子,演示wait命令的使用:
#!/bin/bash
#
# 异步执行(wait)使用样例-父脚本
#
echo "父脚本:启动子脚本.."
./async-child &
# 通过将shell参数 $! 赋给pid变量,以记录子进程的进程ID
pid=$!
echo "父脚本:子脚本(PID=${pid})已启动"
echo "父脚本:继续执行中.."
sleep 2
echo "父脚本:暂停执行,等待子脚本执行完毕.."
wait ${pid}
echo "父脚本:子脚本已结束,父脚本继续.."
echo "父脚本:父脚本执行结束。脚本退出!"
下面是子脚本:
#!/bin/bash
#
# 异步执行(wait)使用样例-子脚本
#
echo "子脚本:正在运行.."
sleep 5
echo "子脚本:子脚本结束。脚本退出!"
脚本执行,产生如下输出:
[fbap:/home/fbap/usertmp]>./async-parent.sh
父脚本:启动子脚本..
父脚本:子脚本(PID=42620)已启动
父脚本:继续执行中..
子脚本:正在运行..
父脚本:暂停执行,等待子脚本执行完毕..
子脚本:子脚本结束。脚本退出!
父脚本:子脚本已结束,父脚本继续..
父脚本:父脚本执行结束。脚本退出!