Я видел этот аналогичный вопрос , в котором говорится, что дочерний процесс не будет автоматически уничтожен при выходе из родительского процесса. Итак, я написал простую программу, пытающуюся проверить, что:
#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
:
- Программа немедленно закрылась, я ожидал, что дочерний процесс все равно будет писать в терминал, если он не будет завершен. Более того:
- В списке процессов не было отображено ни 8056, ни 8057.
Означает ли это, что дочерний процесс будет автоматически уничтожен при выходе из родительского процесса? Или я пропустил какие-либо детали управления процессами в программе C?