2016-11-09 84 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程序在运行。