|
|
Vervielfältigen von Prozessen: fork
Ein neuer Prozess entsteht durch den Aufruf von
#include <unistd.h> pid_t fork(void);
Beide Prozesse stehen nach dem Ausführen des
[Prozessteilung durch fork] int SohnPID;
SohnPID=fork(); if (SohnPID > 0) { /* Der Vater ist hier aktiv */ } else if (SohnPID == 0) { /* Der Sohn ist hier aktiv */ } else { /* das war's wohl: Fehler! */ } Diese Konstruktion ist ideal, um Serverprozesse zu implementieren. Sobald eine Anfrage vorliegt, teilt sich der Prozess. Beide Prozesse haben die gleichen Informationen, kennen also den Anfrager und haben die Zugriffe auf die benötigten Dateien. Der Vaterprozess kann also hier die Arbeit ohne Zeitverlust dem Sohn überlassen, die Verbindung zum Anfrager schließen und auf neue Anfragen warten.
Geburt eines DämonsWie schon an anderer Stelle erwähnt, ist ein Dämon ein Prozess, der im Hintergrund läuft und auf ein bestimmtes Ereignis wartet. Serverprozesse sind als Dämonen implementiert oder werden von Dämonen gestartet. Wenn ein Prozess im Hintergrund laufen soll, erzeugt er von sich selbst ein Duplikat und endet, so dass nur noch der Sohn läuft. Das Ergebnis ist, dass dem Sohn der Vater fehlt. Das macht den init-Prozess so traurig, dass er den Sohn adoptiert. Der Code ist sehr kurz:
if (fork()!=0) exit(0); Als weiterer Vorteil gilt, dass der Prozess nicht das SIGHUP-Signal bekommt, falls er von Hand gestartet wurde und der startende Benutzer sich abmeldet. Dieses würde der Vater bekommen. Da der aber nicht mehr lebt...
Der unsterbliche ProzessIn manchen Fällen ist es wichtig, dass ein Prozess zwar aufgrund widriger Umstände auch sterben könnte, aber dann sofort wieder neu erzeugt werden soll. Auch eine solche Konstruktion können Sie mit dem fork leicht erzeugen.
[Unsterblicher Prozess] for(;;) { /* bis zum nächsten Stromausfall */ procid = fork(); if (procid>0) { /* Vater */ wait(&Zustand); /* wenn wir hier sind, ist der Sohn tot */ } else { /* Sohn */ for (;;) { /* forever and ever ... */ /* hier arbeitet der Sohn ewig (fast)... */ } } }
Der Vaterprozess läuft sofort auf den Aufruf von Muss ein solcher Dämon doch einmal abgeschossen werden, muss natürlich der Vater vor dem Sohn getötet werden.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|