Your Browser is not longer supported
Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...
{{viewport.spaceProperty.prod}}
fork - neuen Prozess erzeugen
&pagelevel(4)&pagelevel
Definition | #include <unistd.h> Optional #include <sys/types.h> (Ende) pid_t fork(void); |
Beschreibung | fork() erzeugt einen neuen Prozess. Der neue Prozess (Sohnprozess) ist in Bezug auf die folgenden Punkte eine exakte Kopie des aufrufenden Prozesses (Vaterprozess):
reale und effektive Benutzer- und Gruppennummern Umgebung sbe-Bit (siehe exec() ) Signalaktionen (SIG_DFL , SIG_IGN , Adresse der Signalbehandlungsfunktion) zusätzliche Gruppennummern s-Bit für Eigentümer s-Bit für Gruppe Prioritätswert (siehe nice() ) alle zugeteilten gemeinsam nutzbaren Speichersegmente (siehe shmat() ) Prozessgruppennummer Terminalnummer (siehe exit() ) aktuelles Dateiverzeichnis Root-Dateiverzeichnis Schutzbitmaske (siehe umask() ) Betriebsmittel-Grenzwerte (siehe getrlimit() ) steuerndes Terminal
Der Sohnprozess unterscheidet sich vom Vaterprozess in folgenden Punkten: Der Sohnprozess besitzt eine eigene eindeutige Prozessnummer. Die Sohnprozessnummer entspricht keiner aktiven Prozessgruppennummer. Der Sohnprozess besitzt zusätzlich eine von der Sohnprozessnummer verschiedene Vaterprozessnummer (d.h. die Prozessnummer des Vaterprozesses). Der Sohnprozess besitzt eine eigene Kopie des Vater-Dateideskriptors. Alle Dateideskriptoren des Sohnprozesses teilen die Dateibeschreibung des Vaterprozess-Dateideskriptors. Der Sohnprozess besitzt eine eigene Kopie der Vater-Dateiverzeichnisströme. Alle Dateiverzeichnisströme des Sohnprozesses können den Lese-/Schreibzeiger mit dem entsprechenden Dateiverzeichnisstrom des Vaterprozesses teilen. Der Sohnprozess kann eine eigene Kopie des Vater-Meldungskatalog-Deskriptors besitzen. Die Werte des Sohnprozesses für die tms -Strukturkomponenten tms_utime , tms_-stime , tms_cutime und tms_cstime sind gleich 0 gesetzt (siehe times() ). Die Restzeit bis zu einem Alarmuhr-Signal ist gleich 0 gesetzt (siehe alarm() ). Alle semadj -Werte sind gelöscht (siehe semop() ). Dateisperren des Vaterprozesses werden vom Sohnprozess nicht geerbt (siehe auch fcntl() ). Die für den Sohnprozess anstehende Signalmenge wird mit der leeren Menge initialisiert.
Werden Threads verwendet, so wirkt sich die Funktion auf den Prozess oder auf einen Thread wie folgt aus: Ein Prozess wird mit einem einzigen Thread erzeugt. Wenn ein ”multi-threaded” Prozess fork() aufruft, enthält der neue Prozess eine Kopie des aufrufenden Threads und seines gesamten Adressraums einschließlich des Zustands von Mutex-Objekten und anderen Ressourcen. Mit der Funktion pthread_atfork() können Fork-Handler eingerichtet werden.
BS2000 |
Returnwert | 0 | bei erfolgreicher Beendigung. Dieser Returnwert wird an den Sohnprozess und die Prozessnummer des Sohnprozesses an den Vaterprozess zurückgeliefert. |
| -1 | bei Fehler. Dieser Returnwert wird an den Vaterprozess zurückgeliefert; es wird kein Sohnprozess erzeugt. errno wird gesetzt, um den Fehler anzuzeigen. |
Fehler | fork() schlägt fehl, wenn gilt:
|
| EAGAIN
| Das System hat nicht genügend Ressourcen, um einen weiteren Prozess zu erzeugen. Die systembedingte Grenze für die Anzahl der systemweit oder für eine einzelne Benutzernummer gleichzeitig ablaufenden Prozesse {CHILD_MAX} würde überschritten werden, oder wenn im Vaterprozess DIV- oder FASTRAM-Bereiche abgelegt sind. |
| Erweiterung |
| ENOMEM
| Der Swap-Bereich ist zu klein. (Ende) |
Hinweise | fork() kann ab dieser Version auch in Signalbehandlungs- und Contingency-Routinen verwendet werden.
|
Siehe auch | alarm() , exec , fcntl() , semop() , signal() , times() , sys/types.h , unistd.h .
|