2016-11-09 67 views
2

我想在Python的子使用pkill -f myPatternPython的子進程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 ]) 

當我打電話stop_process在集羣中的所有節點,它適用於所有節點,但當前節點。即當host == socket.gethostname()應用程序打印Terminated並退出。

以給定的模式停止過程是否正確?如果是,我該如何解決這個問題?

感謝

+0

難道那是在第一次調用中使用列表,而在第二次使用字符串作爲pkill命令?我可以建議你嘗試使用shlex.split嗎? –

+0

你確定'host == socket.gethostname()'是'True'嗎? –

+0

是的,即使沒有任何條件,它也會崩潰。我用'os.system('pkill -f'+ name)'測試過''。再次,應用程序停止,終止'消息 –

回答

0

當您啓動Python程序,你可能調用它傳遞過程的名稱殺死(只是猜測這裏..)。 pkill也會找到這個過程(您使用-f)並在它正常終止之前將其終止。您需要找到一種方法來過濾python程序的pid(例如,嘗試os.getpid()),或者只使用進程名稱(避開-f選項)。

它只發生在你的本地機器上,因爲只有你有python程序在運行。