2017-08-05 30 views
0

私は "親"のpythonスクリプトscript_1.py、...、script_n.pyのコレクションを持っています。それぞれは、os.systemとnohupを使用して非同期的にさまざまな "子" Pythonスクリプトを起動します。各親スクリプトも、/tmp/task_1/kill.shにその子のPIDを保存し...、nohupスクリプトのバッチを連続して実行します

/tmp/task_n/kill.shは私が親のすべての非同期子供がI-1が完了していることを確認して、連続してすべてののn親スクリプトを実行したいです親を実行する前に実行i。 (2つの親のための)

私の試みはbashスクリプトを実行することでした:

#!/bin/bash 

python script_1.py & 
wait 
python script_2.py & 

しかし、これはps -ef | grep pythonに応じscript_1.pyscript_2.pyのすべての子を起動します。

FYI:各kill.shファイルの内容は、あなたが最初の待機が終了した後、まだ実行されているすべてのチャイルズを待ちたいフォーム

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

pythonスクリプト*を連続して実行したい場合は、*それらをバックグラウンドにしないでください。 –

+0

@JeffSchaller:私はフォアグラウンドプロセスとしてscript_1.pyとscript_2.pyを実行した場合でも、script_1の子供たちは 'Pythonのscript_2.py'が呼び出される時までに実行を終了しているという保証はありません。どのように私は私の希望の動作を確保できますか? – user11881

+0

@JeffSchallerは私がscript_2を起動するタイミングを決定するためにscript_1によって生成されたPIDのリストを使用する必要がありますが、私はこれを行う方法がわからないんだと思われます。私はこれを熟考していますか? – 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 
関連する問題