Почему дочерний процесс автоматически убивается в этой программе? - PullRequest
1 голос
/ 10 апреля 2020

Я видел этот аналогичный вопрос , в котором говорится, что дочерний процесс не будет автоматически уничтожен при выходе из родительского процесса. Итак, я написал простую программу, пытающуюся проверить, что:

#include <sys/types.h>
#include <stdio.h>
#include <unistd.h>

int main() {
  if (!fork()) {
    while (1) {
      printf("%d: child!\n", getpid());
      sleep(5);
    }
  }
  while (1) {
    printf("%d: parent!\n", getpid());
    sleep(1);
  }
  return  0;
}

Когда я запустил программу, вывод выглядит так:

8056: parent!
8057: child!
8056: parent!
8056: parent!
8056: parent!
8056: parent!

И я нажал ctrl + C, ожидая, что родительский процесс будет убит, но дочерний процесс все еще существует. Однако после того, как я нажал ctrl + C:

  1. Программа немедленно закрылась, я ожидал, что дочерний процесс все равно будет писать в терминал, если он не будет завершен. Более того:
  2. В списке процессов не было отображено ни 8056, ни 8057.

Означает ли это, что дочерний процесс будет автоматически уничтожен при выходе из родительского процесса? Или я пропустил какие-либо детали управления процессами в программе C?

...