Как можно поддерживать связь с дочерним процессом, если родительский процесс перезапускается? - PullRequest
0 голосов
/ 25 ноября 2018

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

Как правило, это все нормально, используя обычный подпроцесс Popen с signaling / waitpid.Моя проблема в том, что я хочу иметь возможность перезапустить планировщик, не влияя на выполнение заданий, и восстановить связь после перезапуска планировщика.

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

Я рассматриваю попытку linuxвместо этого очереди сообщений, но не уверены, что это правильный путь.Другой вариант - настроить прием сокета сервера на планировщике и подключить подпроцессы к планировщику при запуске и восстановить соединение, если оно разрывается.Это может быть излишним, но, возможно, самым надежным.Жаль, что мне пришлось пройти через все эти неприятности, поскольку я не могу просто «повторно подключить» дочерний процесс при перезапуске (я понимаю, что для этого есть причины).

Есть еще какие-нибудь мысли?Кажется, это общая проблема, с которой столкнется любой планировщик. Я что, упускаю какое-то очевидное решение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...