![BASH:延迟异步运行命令](https://linux22.com/image/1285088/BASH%EF%BC%9A%E5%BB%B6%E8%BF%9F%E5%BC%82%E6%AD%A5%E8%BF%90%E8%A1%8C%E5%91%BD%E4%BB%A4.png)
实际上我想要完成的是以下内容,其中 cmd1 需要一段时间才能运行(约 1 分钟),而 cmd2 无论何时运行时几乎立即返回:
- cmd1启动
- 稍等片刻(约 10 秒)
- cmd2运行
- 再等一会儿
- cmd2再次运行
- 一段时间过去
- cmd1 完成
编写脚本非常重要,因为它必须进入一个相当大的循环,该循环使用许多不同的参数运行 cmd1,然后对其他几个长时间运行的命令重复执行相同的操作。
我怎样才能做到这一点?
答案1
cmd1 &
cmd1_pid=$!
sleep 10
cmd2
sleep 10
cmd2
wait $cmd1_pid
解释:cmd1 &
在 shell 的后台启动一个进程。$!
变量包含该后台进程的 pid。shell 继续处理其他命令。sleep 10
意思是“等待一会儿”。OP 只是想cmd2
按线性顺序启动,所以这部分很简单。在脚本片段的末尾,我们只需等待cmd1
完成(甚至可能更早完成)wait $cmd1_pid
。