2017-08-05 210 views
0

我有一个“父”python脚本集合script_1.py,...,script_n.py,其中每一个都使用os.system和nohup异步启动一堆不同的“子”python脚本。每个父脚本也节省了孩子的的PID到/tmp/task_1/kill.sh,...,/tmp/task_n/kill.sh连续运行nohup脚本批处理

我要连续运行所有ň父脚本,确保所有父的异步孩子的i-1已完成在运行父母之前执行i

我尝试(两个父母)是运行bash脚本:

#!/bin/bash 

python script_1.py & 
wait 
python script_2.py & 

然而,这种启动的script_1.pyscript_2.py所有儿童根据ps -ef | grep python

FYI:每个kill.sh文件的内容是形式

#!/bin/sh 
kill 36713 
kill 36715 
etc.. 
+1

如果你想连续运行python脚本*,那么不要背景它们!? –

+0

@JeffSchaller:即使我将script_1.py和script_2.py作为前台进程运行,也无法保证在调用“python script_2.py”时script_1的子项已经完成执行。我怎样才能确保我想要的行为? – user11881

+0

@JeffSchaller我怀疑我需要使用script_1生成的PID列表来决定何时启动script_2,但我不确定如何执行此操作。我是否在说这个? – user11881

回答

0

你想等待第一等待结束后所有孩子的仍在运行的。
当主脚本完成时,我假设文件/tmp/task_1/kill.sh已完成。你可以找到PID与 SED -n“/杀/ S /杀// P” /tmp/task_1/kill.sh 你要等待这些:

#!/bin/bash 
python script_1.py & 
wait 
wait $(sed -n '/kill/ s/kill //p' /tmp/task_1/kill.sh) 
python script_2.py & 

还可以测试在循环:

scriptnr=1 
while test -x "script_${scriptnr}.py"; do 
    python script_${scriptnr}.py & 
    wait 
    wait $(sed -n '/kill/ s/kill //p' /tmp/task_${scriptnr}/kill.sh) 
    ((scriptnr++)) 
done