Ich bin total neu in C. Ich habe den folgenden Code ausprobiert, in der Erwartung, dass das Kind mit dem Pid der Eltern übereinstimmen würde, aber das ist nicht der Fall.c fork's kind ppid stimmt nicht mit dem pid der Eltern überein
int main() {
int pid;
printf("I'm process with pid=%d\n", getpid());
switch (pid = fork()) {
case -1:
perror("fork");
exit(1);
case 0:
printf("I'm the child process: pid=%d, ppid=%d\n", getpid(), getppid());
break;
default:
printf("I'm the parent process: pid=%d, ppid=%d\n", getpid(), getppid());
break;
}
exit(0);
}
> gcc -o fork fork.c
> ./fork
I'm process with pid=16907
I'm the parent process: pid=16907, ppid=6604
I'm the child process: pid=16908, ppid=1 // <-- expected ppid=16907, why 1?
>
Was habe ich falsch gemacht?
Der übergeordnete Prozess wird beendet, bevor der untergeordnete Prozess "getppid" aufrufen kann. Also das Kind Prozess Zombies und seine Eltern ist der Root-Prozess (1) – WhozCraig
Ehrfürchtig, das ist es! Ich habe den Schlaf (1) kurz vor dem Ausgang hinzugefügt und es hat funktioniert, danke. – ling
Es wäre besser für die Eltern zu warten() bis das Kind fertig ist - es wird weniger Verzögerung geben. Aber 'sleep (1)' funktioniert auch. –