Warum getppid() von Kind 1 zurück
Ich lief das Programm
#include<stdio.h>
#include <unistd.h>
main()
{
pid_t pid, ppid;
printf("Hello World1\n");
pid=fork();
if(pid==0)
{
printf("I am the child\n");
printf("The PID of child is %d\n",getpid());
printf("The PID of parent of child is %d\n",getppid());
}
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());
}
}
Die Ausgabe, die ich bekam war.
$ ./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
Konnte ich nicht verstehen, die Linie
Die PID der Eltern von Kind 1
Sollte es gewesen 3071?
- Würden Sie beobachten das Verhalten, das Sie erwarten, dass durch Zugabe geeigneter
fflush(NULL);
(vor derfork
) undsleep(1);
Anrufe (sowohl im then-und else-Teil derif
, und kurz vor dem Endemain
).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Weil der übergeordnete Prozess ist abgeschlossen, wenn das Kind fragt seine Eltern pid.
Wenn ein Prozess fertig ist, werden alle seine Kinder neu zugewiesen werden als Kinder des init-Prozess, die pid 1.
Versuchen Sie es mit
wait()
in der Eltern-code zu warten, für das Kind zu führen. Es sollte dann so funktionieren wie Sie es erwarten.pid 1 ist für den init-Prozess und es sieht aus wie der übergeordnete Prozess beendet, bevor das Kind konnte drucken.
Wenn Sie Bearbeiten, wird der else-Teil wie dieses :-
Sollten Sie den rechten Ausgang.