[c] Fork Funktion mit ppid

New member
Ich habe ein wenig mit Linux C programmiert. Es geht darum, dass man 4 Prozesse mit der fork Funktion hintereinanderreiht. Erdt kommt Parent dann Child, dann das Child vom Child undsoweiter. Hier ist der Queltext mit Shell- Ausgabe

Code:
#include  <stdio.h>
#include  <string.h>
#include  <sys/types.h>


main()
{
int pid1;
int pid2;
int pid3;
pid1=fork();
if (pid1>0)
{
printf("Hallo User!!\n");
printf("PID: %d,PPID: %d\n",getpid(), getppid());
sleep(10);
printf("Tschüss User!!\n");
printf("PID: %d,PPID: %d\n",getpid(), getppid());
}
if (pid1==0)
{
printf("PID: %d,PPID: %d\n",getpid(), getppid());
pid2=fork();
if (pid2==0)
{
printf("Ich muss weg!!\n");
printf("PID: %d,PPID: %d\n",getpid(), getppid());
pid3=fork();
if (pid3==0)
{
printf("PID: %d,PPID: %d\n",getpid(), getppid());
sleep(5);
printf("PID: %d,PPID: %d\n",getpid(), getppid());
}
}
}
return 0;
}

Hallo User!!
PID: 2830,PPID: 2097
PID: 2831,PPID: 2830
Ich muss weg!!
PID: 2832,PPID: 1
PID: 2833,PPID: 2832
PID: 2833,PPID: 1
Tschüss User!!
PID: 2830,PPID: 2097

Mich wundert, dass zweimal bei der Parent PID 1 steht, da müsste doch 2831 bzw. 2832 stehen. An der blau markierten Zeile erkennt man, dass es ja schon mal geklappt hat.
Hat das was mit init zu tun?
Ach ja ich habe dafür getpid und getppid verwendet!
 
Zuletzt bearbeitet von einem Moderator:
Hey,
ich musste mich selbst erst mal rein denken und habe dein Beispiel mit anderer (imho sinnvollerer ;) ) Ausgabe nachgebaut.

Ich bin mir nicht 100%ig sicher, aber ich meine das liegt an sleep(). Einfach gesagt erstellst du einen Kind-Prozess, der dann 5 Sekunden wartet. Inzwischen hat sich der Parent aber schon beendet. Wenn du nach den 5 Sekunden also die Parent-PID ausliest ist das die 1, weil der Prozess von adoptiert wurde (irgendeinen parent muss es geben).

PS: :shift:
 

Online-Statistiken

Zurzeit aktive Mitglieder
0
Zurzeit aktive Gäste
202
Besucher gesamt
202

Neueste Themen

Beliebte Forum-Themen

X
Keine passende Antwort gefunden?