一个接一个地运行一系列命令

Pra*_*mna 7 bash

我有一种情况,我运行两个命令(它们进入后台(nohup)),2 小时后返回,如果两者都完成,再运行两个命令(再次 nohup),2 小时后再次返回并再运行两个命令等等..

我想知道我是否可以将这些排队,这样前两个完成后,接下来的两个自动开始,这样我就不需要每2小时检查一次?

所有这些都是独立的程序;它们是消耗内存和 CPU 的模拟,因此我不希望任何时候同时运行两个以上的模拟。

我使用类似于以下的语法运行它们:

nohup mySimulator inputs1.txt
nohup mySimulator inputs2.txt
nohup mySimulator inputs3.txt [after the first two have completed, that is..]
Run Code Online (Sandbox Code Playgroud)

小智 8

像这样写一个shell脚本:

nohup mySimulator inputs1.txt
nohup mySimulator inputs2.txt
while (ps -A | grep -v grep | grep mySimulator > /dev/null); do sleep 1; done
nohup mySimulator inputs3.txt
Run Code Online (Sandbox Code Playgroud)

然后从shell运行它

它启动两个模拟器,然后等待直到进程列表中没有 mySimulator 然后继续。

(这是在 Mac 上运行的,因此根据您的操作系统,它可能需要稍作调整...... ps -A 应该打印所有正在运行的进程的列表)


Uta*_*ead 8

使用wait命令,但不要使用 nohup。

command1 &
command2 &
wait        # this waits for command1 and command2
command3 &
command4 &
Run Code Online (Sandbox Code Playgroud)

来自man bash

wait [n ...] 等待每个指定的进程并返回其终止状态。每个 n 可能是进程 ID 或作业规范;如果给出了作业规范,则等待该作业管道中的所有进程。如果未给出 n,则等待所有当前活动的子进程,返回状态为零。如果 n 指定一个不存在的进程或作业,则返回状态为 127。否则,返回状态为最后等待的进程或作业的退出状态。