Процесс A fork()
процесс B.
Процесс A умирает, и поэтому init
принимает B.
Наблюдатель создает процесс C.
Возможно ли, чтобы C принял B из init
?
Обновление
Или было бы возможно, чтобы C принимал B непосредственно (когда A умирает), если C был создан до мертвого, без init
, становясь промежуточным родителем B?
Update-1:
Также я был бы признателен за любые замечания о том, почему возможность принять процесс так, как я описал, будет плохой или трудно реализовать.
Update-2 - пример использования (родительский и дочерний элементы относятся к процессам):
У меня есть приложение, использующее родителя для управления целым рядом детей, которые полагаются на средство управления родителями. Для выполнения своей работы родитель полагается на уведомление о завершении дочернего процесса, которое выполняется посредством приема связанного сигнала SIGCHLD
.
Если сам родитель умирает из-за какой-то случайности (включая segfaulting), мне нужно перезапустить всю "семью", так как теперь невозможно что-то инициировать на дочернем завершении (что также может быть связано с segfault).
В таком случае мне нужно сбить всех детей и выполнить полный перезапуск системы.
Возможный подход, чтобы избежать этой ситуации, состоял бы в том, чтобы иметь запасной процесс, который мог бы взять на себя роль мертвого родителя... - если он снова сможет получать сигналы дочерних элементов SIGCHLD
!