2016-05-18 19 views
0

私は "prog.py"という名前のpythonスクリプトを持っています。私は現在のスクリプトの動作を監視する新しいプロセスを開く機能を追加したいと思います。スクリプトが終了すると、プロセスは終了を認識して特定の関数を呼び出します。ここに擬似コードがあります:メインプロセス終了後に起動するPythonでプロセスを作成する

while (script is active):  

    sleep(1) # check its status once a second 

func() 

どうすればいいですか?

答えて

1

他のプロセスを最初に起動する必要があるのはなぜですか?最初のプロセスが完了したときに、execingによってこれをより効率的かつ確実に行うことができるようです。たとえば:

import atexit 
import os 

atexit.register(os.execlp, 'afterexitscript.py', 'afterexitscript.py', 'arg1', 'arg2') 

すると、現在のPythonのプロセスが終了、それがシームレスにポーリングループを含むのトラブルに行く必要はありませんこれは、あなたの他のスクリプトを使って自分自身に置き換えられます。あるいは、atexitを使用して、funcがメインスクリプト内で直接実行され、新しいPythonの起動を避けることができます。

+0

+1最後の文です。 'atexit'を使うだけで、特別な理由がなければプロセスを気にしないでください。 –

+0

問題は、atexitドキュメントの次の注記にあります。 "このモジュールを介して登録された関数は、Pythonで処理されないシグナルによってプログラムが強制終了されたとき、Pythonの致命的な内部エラーが検出されたとき、またはos._exit ()が呼び出されます。 私はスクリプト終了のいずれの場合でも動作する解決策を探しています... – CrazySynthax

+0

@CrazySynthax:その場合、「main」プロセスではなく「main」プロセスを監視プロセスで管理する方が簡単ですプロセスがメインプロセスを順番に監視しようとするモニタを生成します。前者は 'サブプロセス 'の単純な使い方であり、後者は一般的に移植性のないOS固有のプロセスデタッチステップとリグマロールを含む。 – ShadowRanger

関連する問題