BASH:延迟异步运行命令

BASH:延迟异步运行命令

实际上我想要完成的是以下内容,其中 cmd1 需要一段时间才能运行(约 1 分钟),而 cmd2 无论何时运行时几乎立即返回:

  1. cmd1启动
  2. 稍等片刻(约 10 秒)
  3. cmd2运行
  4. 再等一会儿
  5. cmd2再次运行
  6. 一段时间过去
  7. 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

相关内容