在另一个(已经运行)完成后启动脚本

所以我有一个进程正在运行,这将需要几个小时才能完成。 我想在那个完成之后自动启动另一个进程。 请注意,我不能在第一个脚本中添加一个调用,也不能创build另一个脚本来顺序运行这两个脚本。 有没有办法在Linux中做到这一点?

编辑:一个选项是使用pgrep轮询每x分钟,并检查过程是否完成。 如果是的话,启动另一个。 但是,我不喜欢这个解决scheme。

PS:两者都是bash脚本,如果有帮助的话。

投票可能是要走的路,但不一定非常可怕。

 pid=$(ps -opid= -C your_script_name) while [ -d /proc/$pid ] ; do sleep 1 done && ./your_other_script 

给定第一个进程的PID,循环

 while ps -p $PID; do sleep 1; done ; script2 

应该做的伎俩。 这比pgrep和进程名更稳定一些。

你可以wait已经运行的进程使用bash内置的命令wait 。 男子bash 。

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

可能是你可以尝试按ctrl + z先input

 fg;"your second job" 

通常情况下,你的程序正在运行几个恶魔。 在这种情况下,你的pid将是一个数组。 只要使用:

PID =($(pidof -x process_name)) #this将给定进程的所有PID保存在$ pid数组中

现在,只需修改thiton的代码:

while ps -p ${PID[*]}; do sleep 1; done ; script2

我有类似的问题,并通过这种方式解决:

nohup bash script1.sh&

等待

nohup bash script2.sh&

最简单的方法是:

 ./script1.sh && ./script2.sh 

&&表示等待script1成功完成,然后再继续执行script2。