2016-11-09 10 views
2

Я хочу использовать pkill -f myPattern в подпроцессе питона в: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 ]) 

, когда я звоню stop_process со всеми узлами в кластере, это работает для всех узлов, кроме текущего узла. То есть, когда host == socket.gethostname() приложение печатает Terminated и выходит.

Это правильный способ остановить процесс с заданным рисунком? Если да, то как я могу решить эту проблему?

Благодаря

+0

Может ли быть так, что при первом вызове вы используете список, а во втором - строку для команды pkill? Могу ли я предложить вам попробовать использовать shlex.split? –

+0

Вы уверены, что 'host == socket.gethostname()' is 'True'? –

+0

Да, даже без каких-либо условий, он падает. Я тестировал с помощью 'os.system ('pkill -f' + name)'. Опять же, приложение останавливается с сообщением 'Terminated' –

ответ

0

Когда вы начинаете ваш питон программа, которую вы, вероятно, вызвать его передавая имя процесса, чтобы убить (только гадать здесь ..). pkill найдет также этот процесс (вы используете -f) и убейте его, прежде чем он закончится правильно. Вам нужно найти способ фильтрации pid программы python (например, попробуйте os.getpid()) или используйте только имя процесса (исключая опцию -f).

Это происходит только на вашей локальной машине, потому что только там у вас запущена программа python.

Смежные вопросы