Ich versuche, mit mehreren Prozessen in Linux arbeiten mit fork()
Funktion in C, das ist mein Code:Prozess Eltern ID des Kind-Prozess von PID der Eltern unterscheidet
p1 = fork();
if(p1 != 0){
p2 = fork();
}
printf("My PID is %d\n",getpid());
printf("My parent PID is %d\n",getppid());
Nun wollen wir den übergeordneten Prozess übernehmen ID 100 ist, und die beiden untergeordneten Prozessen (P1, P2) IDs sind 101 & 102 und der init-Prozess PID wird 0 meine erwartete Ausgabe ist:
My PID is 100
My parent PID is 0
My PID is 101
My parent PID is 100
My PID is 102
My parent PID is 100
Stattdessen sehe ich etwas anderes, die beiden untergeordneten Prozessen habe die gleiche PPID, aber der erste Prozess ha s ist eine andere PID. Hier ist ein Beispiel für die Ausgabe ich erhielt:
My PID is 3383
My parent PID is 3381
My PID is 3387
My parent PID is 1508
My PID is 3386
My parent PID is 1508
Meine Frage ist, sollte nicht die übergeordnete PID der beiden Kindprozesse sein ? Hoffe jemand kann erklären, wie alles hier funktioniert und was mache ich (oder denke) falsch.
Was passiert, wenn Sie einen Schlaf hinzufügen, nachdem beide 'printf' fertig sind? –
@MohitJain es tatsächlich behoben, wie ist es passiert? Ich meine einen Sleep Nach dem 'printf' sollte sich eigentlich nichts mehr ändern, da die Prozesse erstellt werden und' fork' das gleiche ... – argamanza