Wie fork() eine genaue Anzahl der Kinder
Also ich arbeite an einem Programm, das eine bestimmte Aufgabe mehrere Male. Ich habe das Programm geschrieben schon einmal mit threads, aber jetzt bin ich verpflichtet, es zu tun mit einem Prozess mit fork().
Mit threads, ich würde einfach erstellen Sie die angegebene Anzahl von threads, haben Sie eine Funktion ausführen (ändern einer variable im gemeinsamen Speicher), und dann führe schließlich etwas, das den letzten Wert in den shared memory.
Nun möchte ich aber, das gleiche zu tun, aber ich bin mir nicht sicher, wie es zu tun, als jedes mal ich rufen Sie fork() im wesentlichen verdoppelt sich. So natürlich, wenn ich call fork() in einen forloop, jede Eltern-und Kind-Prozess wird dann durch die Schleife ruft fork() auf Ihre eigenen.
Also meine Frage in Kurzform:
wie könnte ich erstellen, eine genaue Anzahl von Kindprozessen mit fork (sprich ich muss 5 Kinder), und haben meine Eltern-Prozess warten, bis diese 5 sind fertig ausgeführt ist, bevor es bewegt sich auf?
Danke für die Hilfe!
InformationsquelleAutor pledgehollywood | 2013-03-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, das wird Arbeit:
fork()
Fehler.Das funktioniert, außer Sie wollen call waitpid 5 mal statt nur einmal. waitpid(-1) bedeutet warten Sie, bis "jeder" Kind-Prozess zu beenden, nicht nur eine.
Wird dies nicht bedeuten, dass jedes Kind-Prozess wird weiterhin mit der Schleife? Zum Beispiel, wenn
i
ist 0, Sie laichen einen Kind-Prozess, jetzt ist das Kind und die Eltern haben beide loops und beide Inkrementi
beidefork
einen neuen Kind-Prozess, Sie haben jetzt 4 Prozesse, alle Inkrementi
... etc. Vielleicht bin ich falsch, und ich brauche Kaffee...gibt 0 zurück, in der Kind-Prozess und die pid des Kindes in der Eltern-Prozess. Der check
if (fork() == 0)
stellt sicher, dass der code in derif
- block wird nur ausgeführt, durch die Kinder. Da es keinefork()
imif
block, die Kinder werden nicht weitere Prozesse erstellen.Nun, es gibt eine
exit(0)
gibt es den Unterschied macht! Ohne Sie, wird der Kind-Prozess wird fortgesetzt-looping-genau wie seine Eltern.InformationsquelleAutor niculare
Entweder können Sie die Struktur Ihrer Prozesse, so dass jede Gabel eine relevante Anzahl von Kindern (z.B. Eltern-Gabel n-mal, die Kinder n-1, Ihren Kindern, n-2, etc.), oder Sie beschränken würden, die Gabeln so, dass nur die Eltern halten in der Schleife (das wäre der einfachste Fall ist). So machen die Kinder beenden die Schleife.
InformationsquelleAutor hdante