在另一个(已经运行)完成后启动脚本
所以我有一个进程正在运行,这将需要几个小时才能完成。 我想在那个完成之后自动启动另一个进程。 请注意,我不能在第一个脚本中添加一个调用,也不能创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。