Provided by: manpages-de-dev_1.4-1_all bug

BEZEICHNUNG

       fork - erzeugt einen Kindprozess

ÜBERSICHT

       #include <unistd.h>

       pid_t fork(void);

BESCHREIBUNG

       fork()  erzeugt  einen neuen Prozess, indem der aufrufende Prozess dupliziert wird. Der neue Prozess wird
       als das Kind bezeichnet. Er ist bis auf die folgenden Punkte eine exakte Kopie des aufrufenden  Prozesses
       (Parent):

       *  Das  Kind  hat  seine  eigene  eindeutige  Prozess-ID,  die  mit  keiner  ID irgendeiner existierenden
          Prozessgruppe übereinstimmt (setpgid(2)).

       *  Die Parent-Prozess-ID des Kindes ist die gleiche wie die Prozess-ID des Parent-Prozesses.

       *  Das Kind erbt keine Speichersperren des Parent-Prozesses (mlock(2), mlockall(2)).

       *  Für das Kind  wird  die  Nutzung  von  Prozessressourcen  (getrusage(2))  und  Zähler  für  CPU-Zeiten
          (times(2)) auf null zurückgesetzt.

       *  Der Satz für das Kind anstehender Signale ist anfangs leer (sigpending(2)).

       *  Das Kind erbt keine Semaphor-Einstellungen von seinem Parent (semop(2)).

       *  Das Kind erbt keine Datensatzsperren von seinem Parent (fcntl(2)).

       *  Das Kind erbt keine Timer von seinem Parent (setitimer(2), alarm(2), timer_create(2)).

       *  Das  Kind  erbt  keine  ausstehenden  asynchronen  E/A-Operationen  von  seinem  Parent  (aio_read(3),
          aio_write(3)), auch asynchrone E/A-Kontexte des Parents werden nicht vererbt (siehe io_setup(2)).

       Die Prozessattribute in der vorstehenden Liste werden allesamt in POSIX.1-2001  beschrieben.  Parent  und
       Kind unterscheiden sich auch in den folgenden Linux-spezifischen Prozessattributen:

       *  Das  Kind  erbt keine Nachrichten über Verzeichnisänderungen (directory change notifications, dnotify)
          von seinem Parent (siehe die Beschreibung von F_NOTIFY in fcntl(2)).

       *  Die Einstellung PR_SET_PDEATHSIG  von  prctl(2)  wird  zurückgesetzt,  sodass  das  Kind  kein  Signal
          empfängt, wenn sein Parent terminiert.

       *  Der   voreingestellte   Wert   für   den  Timer-Spielraum  (»timer  slack«)  wird  auf  den  aktuellen
          Timer-Spielraum des Parents gesetzt. Siehe die Beschreibung von PR_SET_TIMERSLACK in prctl(2).

       *  Speicherabbildungen, die mit dem madvise(2)-Flag MADV_DONTFORK  markiert  wurden,  werden  nicht  über
          einen Aufruf von fork() hinweg vererbt.

       *  Das Terminierungssignal des Kindes ist immer SIGCHLD (siehe clone(2)).

       *  Die  von  ioperm(2) gesetzten Bits für Portzugriffe werden nicht an das Kind vererbt, stattdessen muss
          das Kind benötigte Bits mittels ioperm(2) aktivieren.

       Beachten Sie die folgenden weiteren Punkte:

       *  Der Kindprozess wird mit einem einzigen Thread erstellt — demjenigen, der fork  aufrief.  Der  gesamte
          virtuelle  Adressraum des Parents wird im Kind repliziert, einschließlich der Zustände der Mutexe, von
          Zustandsvariablen und anderer »pthread«- Objekten; die Verwendung von pthread_atfork(3) kann hilfreich
          sein für die Behandlung von dadurch verursachten Problemen.

       *  Das Kind erbt Kopien des Parent-Satzes von offenen  Dateideskriptoren.  Jeder  Deskriptor  des  Kindes
          bezieht sich auf die gleiche Beschreibung einer geöffneten Datei (siehe open(2)) wie der entsprechende
          Dateideskriptor  im  Parent.  Dies  bedeutet, dass die beiden Deskriptoren die Status-Flags geöffneter
          Dateien, den aktuellen Datei-Offset und signalgesteuerte E/A-Attribute  (siehe  die  Beschreibung  von
          F_SETOWN und F_SETSIG in fcntl(2)) gemeinsam nutzen.

       *  Das  Kind  erbt  Kopien  des  Parent-Deskriptorsatzes  für  offene  Nachrichten-Warteschlangen.  Jeder
          Deskriptor   des   Kindes   bezieht   sich   auf   die   gleiche   Beschreibung    einer    geöffneten
          Nachrichten-Warteschlange  (siehe  mq_overview(7))  wie  der  entsprechende  Deskriptor im Parent. Das
          bedeutet, dass die beiden Deskriptoren die gleichen Flags (mq_flags) gemeinsam nutzen.

       *  Das Kind erbt Kopien des Parent-Satzes für offene Verzeichnis-Streams (siehe opendir(3)). POSIX.1-2001
          besagt, dass die entsprechenden Verzeichnis-Streams auf die  gleiche  Position  zeigen  können;  unter
          Linux/Glibc tun sie es nicht.

RÜCKGABEWERT

       Bei  Erfolg wird dem Parent die PID des Kindprozesses zurückgegeben und dem Kind 0 . Bei Fehlern wird dem
       Parent -1 zurückgegeben, kein Kindprozess erzeugt und errno entsprechend gesetzt.

FEHLER

       EAGAIN fork() kann nicht ausreichend Speicher allozieren, um die Page Tables des Parents zu kopieren  und
              einen Task-Record für den Kindprozess anzulegen.

       EAGAIN Es   war   nicht  möglich  einen  neuen  Prozess  zu  erstellen,  da  die  Ressourcen-Beschränkung
              RLIMIT_NPROC des aufrufenden Prozesses überschritten wurde. Um diesen Wert zu vergrößern, muss der
              Prozess über eine der Capabilitys CAP_SYS_ADMIN oder CAP_SYS_RESOURCE verfügen.

       ENOMEM fork() konnte wegen Speicherknappheit die erforderlichen Kernel-Strukturen nicht anlegen.

       ENOSYS fork()  wird  auf  dieser  Plattform  nicht  unterstützt  (beispielsweise   Hardware   ohne   eine
              Memory-Management Unit).

KONFORM ZU

       SVr4, 4.3BSD, POSIX.1-2001.

ANMERKUNGEN

       Unter  Linux  ist  fork()  mittels  »copy-on-write«-Seiten implementiert, sodass der einzige Nachteil von
       fork() die Zeit und der Speicher ist, der benötigt wird, um die Page Tables des Parents zu  kopieren  und
       eine eindeutige Task-Struktur für das Kind anzulegen.

       Der  Glibc-Wrapper  für  fork()  wird  als  Teil  der NPTL-Threading-Implementierung bereitgestellt. Seit
       Version 2.3.3 der Glibc ruft der fork()-Wrapper nicht mehr den Kernel-Systemaufruf  fork()  auf,  sondern
       clone(2)  mit  Flags, die das Gleiche bewirken wie der traditionelle Systemaufruf. (Ein Aufruf von fork()
       ist gleichbedeutend mit einem Aufruf von clone(2), bei dem für flags nur  SIGCHLD  angegeben  wird.)  Der
       Glibc-Wrapper ruft alle Fork-Handler auf, die mittels pthread_atfork(3) eingerichtet wurden.

BEISPIEL

       Siehe pipe(2) und wait(2).

SIEHE AUCH

       clone(2),  execve(2),  exit(2),  setrlimit(2), unshare(2), vfork(2), wait(2), daemon(3), capabilities(7),
       credentials(7)

KOLOPHON

       This page is part of release 3.54 of the Linux man-pages project.  A  description  of  the  project,  and
       information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite  wurde  von  Martin Schulze <joey@infodrom.org>, Martin
       Eberhard Schauer <Martin.E.Schauer@gmx.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

       Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder  neuer
       bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

       Wenn  Sie  Fehler  in  der  Übersetzung  dieser  Handbuchseite  finden, schicken Sie bitte eine E-Mail an
       <debian-l10n-german@lists.debian.org>.

Linux                                             12. März 2013                                          FORK(2)