fork(2) fork(2)
NAME
fork - Neuen Prozeß erzeugen
SYNTAX
#include <sys/types.h>
#include <unistd.h>
pidt fork(void);
BESCHREIBUNG
fork() bewirkt die Erzeugung eines neuen Prozesses. Der neue Prozeß
(Sohnprozeß) ist eine genaue Kopie des aufrufenden Prozesses (Vater-
prozeß). Dies bedeutet, daß der Sohnprozeß nachstehende Attribute vom
Vaterprozeß erbt:
- reale Benutzer- und Gruppen-ID, effektive Benutzer- und Gruppen-ID
- Umgebung
- "Schließen-bei-exec"-Bit [siehe exec(2)]
- Einstellungen für Signalbehandlung (SIGDFL, SIGIGN, SIGHOLD,
Funktionsadresse)
- zusätzliche Gruppen-IDs
- s-Bit für Eigentümer
- s-Bit für Gruppe
- Ein-/Aus-Status für Profilierung
- nice-Wert [siehe nice(2)]
- Prozeßbereich [siehe priocntl(2)]
- alle zugeteilten gemeinsam benutzten Speichersegmente [siehe
shmop(2)]
- Prozeßgruppen-ID
- Terminalnummer [siehe exit(2)]
- Aktuelles Verzeichnis
- Root-Verzeichnis
- Dateimodus-Erstellungsmaske [siehe umask(2)]
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
fork(2) fork(2)
- Ressourcengrenzwerte
Ein 32-Bit-Prozeß erhält gegebenenfalls die 64-Bit-Ressourcen des
Eltern-Prozesses vererbt [vgl. getrlimit(2) und dort die Erläute-
rungen zu RLIMSAVEDCUR und RLIMSAVEDMAX sowie ulimit(2)].
- steuerndes Terminal
Prozeßpriorität und jegliche prozeßspezifischen Prioritätsparameter,
die für den gegebenen Prozeßbereich bezeichnend sind, können abhängig
von Vereinbarungen diesem speziellen Bereich vererbt sein [siehe
priocntl(2)].
Der Sohnprozeß unterscheidet sich vom Vaterprozeß in folgenden Punk-
ten:
- Der Sohnprozeß hat eine eindeutige Prozeß-ID, die ungleich allen
anderen Prozeßgruppen-IDs ist.
- Der Sohnprozeß hat eine andere Vaterprozeß-ID (d. h. die Prozeß-ID
des Vaterprozesses).
- Der Sohnprozeß hat eine eigene Kopie des Dateideskriptors und des
Verzeichnis-Streams des Vaterprozesses. Jeder Sohndateideskriptor
hat einen gemeinsamen Schreib-/Lesezeiger mit dem entsprechenden
Dateideskriptor des Vaters.
- Alle semadj-Werte werden aufgehoben [siehe semop(2)].
- Prozeßsperren, Textsperren und Datensperren werden vom Sohnprozeß
nicht geerbt [siehe plock(2)].
- Die tms-Struktur des Sohnprozesses ist wie folgt deklariert:
tmsutime, stime, cutime und cstime werden auf 0 gesetzt [siehe
times(2)].
- Die Zeitspanne bis zum Rücksetzen eines Alarmuhrsignals wird auf 0
gesetzt.
- Die Menge der Signale, die an den Prozeß ausgeliefert werden sol-
len, wird auf eine leere Menge initialisiert.
- Der Sohnprozeß kann eine eigene Kopie der Meldungskatalogdeskripto-
ren des Vaterprozesses haben.
- Intervallzeitgeber werden in einem Sohnprozeß zurückgesetzt.
Vom Vaterprozeß gesetzte Datensatzsperren werden nicht vom Sohnprozeß
geerbt [siehe fcntl(2)].
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
fork(2) fork(2)
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
fork() ist erfolglos, und ein Sohnprozeß wird nicht erstellt, wenn
einer oder mehrere der nachstehenden Punkte zutreffen:
EAGAIN Die systembedingte Begrenzung der Gesamtanzahl der für einen
Benutzer ablaufenden Prozesse würde überschritten.
EAGAIN Der Systemspeicher, der beim Lesen über die ungepufferte
("raw") Ein-/Ausgabeschnittstelle zur Verfügung steht, ist
vorübergehend unzureichend.
ENOMEM Der Swap-Bereich ist zu klein.
ERGEBNIS
Nach erfolgreicher Beendigung gibt fork() 0 an den Sohnprozeß und die
Prozeß-ID des Sohnprozesses an den Vaterprozeß zurück. Andernfalls
wird (pidt)-1 an den Vaterprozeß zurückgegeben, kein Sohnprozeß
erstellt und errno zur Anzeige des Fehlers gesetzt.
SIEHE AUCH
alarm(2), exec(2), fcntl(2), getrlimit(2), nice(2), plock(2),
priocntl(2), ptrace(2), semop(2), shmop(2), signal(2), times(2),
ulimit(2), umask(2), wait(2), system(3S), unistd(4), lfs(5), types(5).
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98