Я ищу безопасный способ перезагрузки моей программы python, которая может восстановить контроль над дочерним процессом, запущенным перед перезагрузкой.Может ли подпроцесс python подключиться к исходному дочернему процессу при перезапуске программы?
Я использую подпроцесс с резьбой для мониторинга stdout
/stderr
длинного пробега command
, который будет непрерывно генерировать какое-то выходное сообщение.
Образец фрагмент кода выглядит следующим образом:
class PS(threading.Thread):
def __init__(self, command):
threading.Thread.__init__(self)
self.command = command
def run(self):
try:
process = subprocess.Popen(self.command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for line in iter(process.stdout.readline, ''):
''' do something to line'''
Когда мой питон основной программы прекращается (убить его PID, например), его ребенок процесс (command
исполняется PS
класса) все еще жив, как фоновый процесс.
Мой вопрос в том, есть ли способ в python «повторно подключить» дочерний процесс, чтобы я мог следить за его stdout
/stderr
?
P.S. Мне это нужно только в среде linux, более конкретно в ubuntu 14.04.
Ребенок, вероятно, умрет, если попытается записать его стандартный вывод после выхода родителя, поскольку его стандартный вывод был трубкой, другой конец которой был родительским, а не файлом. – chepner
@chepner Я не знаю, как, но я уверен, что дочерний процесс жив. – user1817188
Но он все еще производит выход? Даже если он каким-то образом забуферирован, программа все равно может потерять некоторый выход в зависимости от того, сколько времени потребуется для повторного подключения. Просто напишите в файл и родитель должен прочитать из файла, а не в трубку. – chepner