См код ниже:смерти Родитель не убивает ребенок proess в программе C Linux
#include<stdio.h>
void main()
{
int pid = fork();
if(pid==0)
{
while(1);
}
else
{
while(1);
}
}
Выполнить этот код из терминала 1:
Перейти к зажиму 2 и проверить процессы на терминале 1:
[email protected]:~$ ps -ft /dev/pts/1
UID PID PPID C STIME TTY TIME CMD
hduser 3824 3505 0 17:20 pts/26 00:00:00 bash
hduser 4007 3824 21 17:33 pts/26 00:00:01 ./a.out
hduser 4008 4007 22 17:33 pts/26 00:00:02 ./a.out
[email protected]:~$
Два a.out работает здесь. Теперь убейте родителю 4007.
[email protected]:~$ kill -9 4007
[email protected]:~$ ps -ft /dev/pts/26
UID PID PPID C STIME TTY TIME CMD
hduser 3824 3505 0 17:20 pts/26 00:00:00 bash
hduser 4008 2077 24 17:33 pts/26 00:00:29 ./a.out
[email protected]:~$
Примечание 4008 все еще работает, и теперь ребенок 2077 (INIT --user).
Моего Сомнения:
- Почему ребенок не погиб от родителей до смерти родителей?
- Обычно, если мы запускаем какой-либо процесс из терминала (bash) без «nohup» и убиваем bash, тогда убивается ребенок bash. Как реализовать это поведение в нашей программе на C?
- Я думал, что поведение по умолчанию состоит в том, что родитель убивает своего ребенка до смерти, и мы должны вызвать wait(), чтобы преодолеть это поведение. Но я был неправ. Тогда какая цель wait()?
Я использую Ubuntu 14 с ядром 3.13.0-52.
В linux дочерний процесс не убивается, когда родитель умирает. – sreeyesh
Почему * должен * убить дочерний процесс при выходе родителя? Такого рода побеждает цель изолированных и независимых процессов. –
Сделайте дочерний процесс демоном, иначе он будет принят процессом init после завершения его родительского контура. –