Станет ли родительский процесс дочернего процесса его родителем, если его родительский процесс завершится - PullRequest
0 голосов
/ 13 октября 2018

Предположим, у меня в следующей программе

 for(i=0; i<3; i++)
 pid = fork();

Насколько я понимаю, 8 процессов будут созданы после итерации цикла for.Processess

Теперь предположим, что выделенный процесс завершится, будет Первый родительский процесс , в конечном итоге станет родителем двух других процессов и Дедушка из Последний процесс в цепочке?

1 Ответ

0 голосов
/ 14 октября 2018

Нет, процесс не становится родительским для дочерних детей или их потомков.

После завершения родительского процесса дочерние элементы этого умершего родителя сразу становятся дочерними для определенного системного процесса.

Традиционно этот назначенный системой процесс представлял собой единый общесистемный процесс, известный как init.Одна из обязанностей этого процесса состояла в том, чтобы «пожинать» (собирать статус выхода) потерянные процессы, когда они в конечном итоге завершаются.Традиционно этот процесс init имел идентификатор процесса, равный 1.

Однако в последние несколько лет стало обычным иметь несколько процессов init в дополнение или, возможно, вместо исходного PID.= 1 init.Например, процессам, выполняющимся в контейнере или в сеансе входа пользователя в систему, может быть предоставлен собственный выделенный процесс init.Таким образом, в современной системе ваши осиротевшие дочерние процессы могут получить родительский PID, который не равен 1.

Ответ на https://unix.stackexchange.com/a/177361/18253 более подробно об этом.

...