2016-11-09 12 views
2

私は、Pythonのサブプロセスでpkill -f myPatternを使用したい:私は、クラスタ内のすべてのノードでstop_processを呼び出すとき、それはすべてのノードが、現在のノードのためにPythonのサブプロセスpkillは

import subprocess as sp 

def stop_process(name,host): 
    host = host.strip() 
    if host == socket.gethostname(): 
     sp.call ([ 'pkill -f', name ]) 
    else: 
     sp.call ([ 'ssh', host, 'pkill -f ' + name ]) 

動作します。つまり、host == socket.gethostname()の場合、アプリケーションはTerminatedを出力して終了します。

与えられたパターンでプロセスを停止するのは正しい方法ですか?はいの場合は、どうすればこの問題を解決できますか?

おかげ

+0

最初の呼び出しではリストを使用し、2番目の呼び出しではpkillコマンドの文字列を使用できますか? shlex.splitを試してみることをお勧めしますか? –

+0

'host == socket.gethostname()'が 'True'ですか? –

+0

はい、if条件がなくても、クラッシュします。 'os.system( 'pkill -f' + name)'でテストしました。最後に、アプリケーションは 'Terminated'メッセージで終了します。 –

答えて

0

あなたはPythonプログラムが起動し、おそらく(ちょうどここに推測...)それは殺すためにプロセスの名前を渡して呼び出します。 pkillも正しく終了する前にこのプロセス(-fを使用)を検出して終了します。 PythonプログラムのPIDをフィルタリングする方法(たとえば、os.getpid()を試してください)、またはプロセス名のみを使用する(-fオプションを避ける)方法を見つける必要があります。

あなたのローカルマシンでのみ起こるのは、そこにpythonプログラムが実行されているためです。