我有一个“父”python脚本script_1.py
,...,script_n.py
的集合,每个脚本都使用os.system和nohup异步启动一堆不同的“子”python脚本。每个父脚本还将其子项的PID保存到/tmp/task_1/kill.sh
,...,/tmp/task_n/kill.sh
我希望连续运行所有 n 父脚本,确保父 i-1 的所有异步子项在运行父 i之前已完成执行。
我的尝试(对于两个父母)是运行bash脚本:
#!/bin/bash
python script_1.py &
wait
python script_2.py &
但是,根据script_1.py
,这会启动script_2.py
和ps -ef | grep python
的所有孩子。
仅供参考:每个kill.sh文件的内容都是
形式#!/bin/sh
kill 36713
kill 36715
etc..
答案 0 :(得分:0)
您希望在第一次等待完成后等待所有孩子仍在运行 主脚本完成后,我假设文件/tmp/task_1/kill.sh已完成。你可以找到pid的 sed -n'/ kill / s / kill // 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