bash - (仅)当之前的作业在 Bash 中完成时才执行命令

标签 bash parallel-processing jobs

我试图确保在并行命令终止后串行运行命令。

command1 &
command2 &
command3

在上面的示例中,command1command2 在后台同时启动,但 command3 很快就运行。我知道这是 Bash 中的预期行为,但我想知道是否有办法在 command1command2 终止后启动 command3 .

可能可以这样做:

(command1; touch done1) &
(command2; touch done2) &
while [ ! -f done1 ] && [ ! -f done2 ]; do sleep 1000; done
command3

...但是如果有更优雅的解决方案可用,我会接受。加入需要是被动的,因为这些命令注定要在 PBS 队列中使用。有任何想法吗?提前致谢。

最佳答案

您可以使用不带参数的 wait 来等待所有先前的作业完成:

command1 &
command2 &
wait
command3

关于bash - (仅)当之前的作业在 Bash 中完成时才执行命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20254328/

相关文章:

bash - 运行 shell 脚本时如何解决 "shift: can' t shift the many"错误?

bash - 如何在AWK中插入shell脚本的命令行参数?

bash - 在 bash 脚本中检测损坏的图像

c - 在集群上运行 openmp

php - Laravel 5.7 作业队列未异步运行

linux - 如何在 Linux 中创建一个可以使用 ROT13 解密和加密文件的菜单?

java - 通过观察者从线程使用列表中仅获取最新元素

python - 具有多个参数和返回值的两个并行函数

laravel 反序列化/解码作业原始主体

node.js - 什么时候对作业队列使用数据库有意义?