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