2017-02-24 3 views
0
#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
int main() { 
     pid_t pid; 
     pid = fork(); // #1 
     if (pid == 0) { 
       if(fork() > 0) // #2 
         fork(); // #3 
     } else 
       fork(); // #4 
     return 0; 
} 

Ich bin wirklich verwirrt auf # 4, weil ich nicht weiß, ob das Programm diese else-Anweisung ausführen wird. Wissen Sie, wie viele Prozesse letztendlich laufen?Was ist die Gesamtzahl der Prozesse für die fork() in Unix?

Und hier gibt es ein anderes Programm. Wie hoch ist die Gesamtzahl der Prozesse? Vielen Dank!

#include <stdlib.h> 
#include <stdio.h> 
#include <unistd.h> 
int main() { 
     for (int i = 0; i < 10; i++) 
       if (fork()) { 
         fork(); 
         fork(); 
       } else 
         fork(); 
     return 0; 
} 

Antwort

0

Sie finden sollten, was Sie in der fork(2) Handbuch Seite benötigen, speziell

Bei Erfolg wird die PID des Kindes Prozess in der Eltern zurückgeführt wird, und 0 wird in das Kind zurück.

Bei einem fork Anruf wir den Anruf so einen Prozess zu tun, aber Rückkehr zwei Prozesse: die Eltern und das (neue) Kind. Sie werden sowohl ausführen alle Code nach der Gabel. Der Prozess erkennt basierend auf dem Rückgabewert, ob es sich um das untergeordnete Element oder das übergeordnete Element handelt (und kann seine Aktion unterscheiden). Wenn man weiß, dass in C alle Nicht-Null-Werte wahr sind, ist es möglich, zu wissen, ob und wer # 4 im else-Fall ausführt: Es wird das Kind sein, das tatsächlich ein Enkelkind produziert.

Das hört sich nach Hausaufgaben an, also überlasse ich Ihnen die Zählung.

Es gibt mehrere Antworten, abhängig davon, was wir in Betracht ziehen, die Möglichkeit, dass Gabel scheitert (Rückkehrcode -1) oder nicht. Mit dem gegebenen Code gehe ich davon aus, dass du es ignorieren kannst.

Verwandte Themen