Процесс A fork()
s процесс B.
Процесс A умирает и, следовательно, init
принимает B.
] Сторожевой таймер создает процесс C.
Возможно ли, чтобы C как-то перенял B из init
?
Обновление:
Или даже возможно, чтобы C усыновил B напрямую (когда A умирает), если C был создан до смерти A, без init
становления промежуточным родителем из Б?
Обновление-1:
Также я был бы признателен за любые комментарии о том, почему наличие возможности принять процесс так, как я описал, было бы плохо или трудно или невозможно реализовать.
Обновление-2– Вариант использования (родительский и дочерний элементы относятся к процессу(ам)):
У меня есть приложение, использующее родитель для управления целой группой дочерних процессов, которые полагаются на средства управления родительского процесса. . Чтобы выполнить свою работу, родитель полагается на получение уведомления о завершении дочернего процесса, что делается посредством получения соответствующего сигнала SIGCHLD
.
Если сам родитель умирает из-за какой-то аварии (включая сбой сегментации), мне нужно перезапустить всю «семью», так как сейчас невозможно запустить что-то при завершении дочернего элемента (что также может быть связано с ошибкой сегментации).
В таком случае мне нужно сбить всех детей и сделать полный перезапуск системы.
Возможным способом избежать этой ситуации было бы наличие запасного процесса, который мог бы взять на себя роль мертвого родителя... - если бы он снова мог получать сигналы SIGCHLD
от дочерних шагов!