2014-02-14 3 views
0

Я пытаюсь внедрить систему очередей заданий, такую ​​как PBS крутящего момента на кластере.python Убить все подпроцессы, даже родительский вышел

Одним из требований было бы убить все подпроцессы даже после выхода родителя. Это важно, потому что, если чья-то работа не ожидает, что ее подпроцессы заканчиваются, преднамеренно или непреднамеренно, подпроцессы становятся сиротами и принимаются в процессе инициализации процесса, тогда будет сложно отследить подпроцессы и убить их.

Тем не менее, я придумал трюк, чтобы обойти проблему, магическим признаком является сродство cpu к подпроцессам, потому что все подпроцессы имеют одинаковую близость cpu с родителями. Но это не идеально, потому что сродство процессора может быть изменено намеренно.

Я хотел бы знать, есть ли что-нибудь еще, что разделяет родительский процесс и его потомками, в то же время непреложного

+0

Вы можете использовать 'prctl()' для Linux, чтобы убить дочерние процессы] (http://stackoverflow.com/a/19448096/4279). Или [создать новый сеанс (/ группа процессов)] (http://stackoverflow.com/q/4789837/4279) – jfs

ответ

0

Таблица процессов в Linux (например, в почти любой другой операционной системе) просто структуру данных в ОЗУ компьютера. Он содержит информацию о процессах, которые в настоящее время обрабатываются ОС.

Эта информация включает в себя общую информацию о каждом процессе

  • идентификатор процесса
  • владелец процесса
  • приоритет процесса
  • переменные среды для каждого процесса
  • родительский процесс
  • указатели на исполняемый машинный код процесса.

Заслуга Marcus Gründler

Безоперационных имеющейся информации поможет вам.

Но вы можете использовать тот факт, что процесс должен прекратиться, когда родительский идентификатор процесса становится 1 (init).

#!/usr/local/bin/python 

from time import sleep 
import os 
import sys 

#os.getppid() returns parent pid 
while (os.getppid() != 1): 
    sleep(1) 
    pass 

# now that pid is 1, we exit the program. 
sys.exit() 

Будет ли это решением вашей проблемы?

+0

спасибо за ответ, в то время как я не пишу сценарий фактического задания, пользователь системы очереди делает это, поэтому я не могу контролировать, как будет выглядеть скрипт пользователя – skipper

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