2015-11-26 1 views
0

Я использую MULTIPROCESSING, чтобы найти свое требование. И когда это работает, я получаю pid (может быть, родитель! Я не знаю, как это назвать), тогда co обрабатывает свой собственный pid и ссылочный идентификатор первого процесса.процесс уничтожения и его суб/совместные процессы путем получения их родительского pid скриптом python

Теперь мне нужно убить все эти процессы, ТОЛЬКО УБИВАЯ ПЕРВОГО ПРОЦЕССА, и тогда это будет лучший способ сделать это. ЧТО ТАКОЕ ПИТОНИЧЕСКИЙ ПУТЬ.

Сценарий похож

ps -ef |grep py 

я получаю

2222 0001 first.py #0001 is os process 
    4323 2222 second.py 
    4324 2222 third.cgi 
    4324 2222 fourth.py 
    4325 2222 fifth.cgi 
    4326 2222 sixth.py 

    2223 0001 newfirst.py ############new first process from another script started 
    4327 2223 newsecond.cgi 
    4328 2223 newthird.py 
    4329 2223 newfourth.cgi 

теперь я процесс глушения (при нажатии кнопки останова)

kill -6 2222 ###from terminal 

только тогда first.py погибает, а оставшиеся совместные процессы все еще работают. Конечно, я могу убить другие процессы из терминала, но я хочу сделать это более питоническим способом (запустив скрипт, который будет запускаться, когда кто-то нажал кнопку формы кнопки STOP, предназначенную для запуска .py-файлов)

Теперь как я могу убить все эти совместные процессы, как только я убью first.py (так как я не хочу, чтобы его колл запускался больше), но другие newfirst.py и его co не должны беспокоиться.

что я придумал, чтобы это далеко

import os 
pid = os.getpid() 
os.system('kill -9 ' + pid) 

так как отфильтровать сопутствующие процессы из этого первого идентификатора процесса 2222 и убить их.

Я также пробовал использовать psutil, но прохождение имени после имени для убийства не очень убедительно.

Я проверил метод subprocess.popen, но не смог и теперь я вышел из логики, пожалуйста, предложите.

Если какая-либо другая информация необходима, сделайте комментарий.

+0

Чтобы убить группу процессов с сигналом 'os.killpg (pgid, sig)', можно использовать. В вашем случае 'os.killpg (pid, 9)' – Kadir

ответ

1

С вашего вопроса я не могу понять; однако я предполагаю, что у вас есть удобный способ процесса, например. в вашем примере, у вас есть идентификатор процесса 2222. Затем вы можете попробовать это:

#Assuming you have parent_pid i.e. from your example you have 2222 
pname = psutil.Process(parent_pid) 
cpid = pname.get_children(recursive=True) 
for pid in cpid: 
    os.kill(pid.pid, signal_num) #signal_num is the signal you want to send i.e. 9 as per your example 

Пожалуйста позаботьтесь обработку исключений, например, проверьте, существует ли процесс/дочерний процесс до его уничтожения и т. д., используя блок try - except.

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