python Убить все подпроцессы, даже если родитель вышел

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

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

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

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


person skipper    schedule 14.02.2014    source источник


Ответы (1)


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

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

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

Кредит принадлежит Маркусу Грюндлеру

Никакая доступная информация не поможет вам.

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

#!/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()

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

person brunsgaard    schedule 14.02.2014
comment
спасибо за ответ, пока я не пишу реальный скрипт задания, этим занимается пользователь системы очередей, поэтому я не могу контролировать, как поведет себя скрипт пользователя - person skipper; 14.02.2014