Почему getppid () из дочернего возврата 1
я запускал программу
#include<stdio.h>
#include <unistd.h>
main()
{
pid_t pid, ppid;
printf("Hello World1n");
pid=fork();
if(pid==0)
{
printf("I am the childn");
printf("The PID of child is %dn",getpid());
printf("The PID of parent of child is %dn",getppid());
}
else
{
printf("I am the parentn");
printf("The PID of parent is %dn",getpid());
printf("The PID of parent of parent is %dn",getppid());
}
}
выходной у меня был.
$ ./a.out
Hello World1
I am the parent
The PID of parent is 3071
The PID of parent of parent is 2456
I am the child
The PID of child is 3072
The PID of parent of child is 1
Я не мог понять строку
PID родителя ребенка равен 1
Он должен был 3071?
2 ответов
потому что родительский процесс завершен к тому времени, когда ребенок запрашивает Родительский pid.
когда процесс завершится, все его дети переводятся как детей процесс init, который пид-1.
попробуйте использовать wait()
в коде родителя, чтобы дождаться выполнения ребенка. Тогда он должен работать так, как вы ожидаете.
pid 1 предназначен для процесса инициализации, и похоже, что родительский процесс завершен до того, как ребенок сможет распечатать.
Если вы редактируете другую часть следующим образом: -
else
{
printf("I am the parent\n");
printf("The PID of parent is %d\n",getpid());
printf("The PID of parent of parent is %d\n",getppid());
while(1);
}
вы должны увидеть правильный выход.