Wie Gabel mehrere Prozesse von einem gleichen Elternteil?

Ich versuche zu erstellen, die mehrere Prozesse aus einer gleichen Eltern, aber es endete immer damit, mehr Prozesse ab, als erwartet. Ich konnte nicht herausfinden, wie es zu tun und benötigen hier etwas Hilfe.

Fand ich ein Stück code online und versucht es,

int main ()
{
    pid_t pid=0;
    int i=0;
    for (i=0; i<3; i++)
    {
        pid=fork();
        switch(pid)
        {
            case 0:
            {
                cout<<"\nI am a child and my pid is:"<<getpid();
                cout<<endl;
                exit(0);
                break;
            }
            default:
            {
                cout<<"\nI am a parent and my pid is: "<<getpid();
                cout<<"\nMy child pid is: "<<pid;
                cout<<endl;
                wait(NULL);
                break;
            }
        }
    }
  return 0;
 }

Dieser code funktioniert und schafft 3 Kinder von gleichen Eltern. Jedoch, wie es scheint, das ist, weil nach jedem child-Prozess erstellt wurde, war es sofort beendet. Also wird es keine Gabel mehr Enkel-Prozess in die nächste Runde der for-Schleife. Aber ich brauche, um diese Kind-Prozesse laufen für einige Zeit und Sie brauchen, um mit den Eltern zu kommunizieren.

Ist es produziert die Ausgabe "ich bin ein Kind ... "? Sobald Sie den Anruf beenden Sie den Prozess endet. Der Grund, warum Sie das Ende so schnell ist, dass Sie nicht etwas zu tun in den Prozess. Sollten Sie rufen einige CPU-intensive Funktion, anstelle von drucken und sofort beenden.
Dies ist nicht ein problem mit der Gabel, aber eine einfache Logik problem. fork() 0 zurück in das Kind. Spur auf dem Papier, was hier geschieht, ohne die exit für das Kind, wird die Schleife erneut ausgeführt, und fork erneut ausgeführt wird. Was Sie tun möchten, ist falls der Prozess ist das Kind, gehen Sie aus der Schleife, die andere, die Sie weiter Schleife und Verzweigung ...
Danke Euch beiden für die Beantwortung meiner Frage. Ich meine modifizierten code mit if..else-Anweisung anstelle der Fall..wechseln und das hinzufügen einer Pause am Ende der Gabel-Kind-Prozess, um aus der Schleife, und es funktioniert!!!!! Ich habe genau das, was ich will!!!
Rufen Sie nicht exit bei den Kindern. Dies bewirkt, dass atexit Aufgaben (wie Spül-Puffer) , die mehr als einmal vorkommen. Verwenden _exit.
Ich kann nicht herausfinden, was Sie tatsächlich gefragt. Ihr code erreicht das Ziel in Ihrem Titel. Am Ende des Körpers, geben Sie an, was Sie wirklich wollen, zu tun. Aber Sie Fragen nicht, keine Frage, wie es zu tun. So erhalten Sie dumme Antwort wie "code, was Sie brauchen, und wenn Sie in Schwierigkeiten geraten, um Hilfe zu bitten".

InformationsquelleAutor Karen | 2014-10-16

Schreibe einen Kommentar