Provided by: manpages-de-dev_1.11-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):

       Der  Kindprozess  und  der  Elternprozess laufen in separaten Speicherbereichen. Zum Zeitpunkt von fork()
       haben beide Speicherbereiche den gleichen Inhalt. Speicherschreibvorgänge, Dateizuordnungen (mmap(2)) und
       die Lösung von Zuordnungen (munmap(2)) eines Prozesses beeinflussen den jeweiligen anderen Prozess nicht.

       Der Kindprozess ist ein exaktes Duplikat des Elternprozesses, mit folgenden Ausnahmen:

       *  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)).

       *  The child does not inherit process-associated record locks from its parent (fcntl(2)). (On  the  other
          hand, it does inherit fcntl(2)  open file description locks and flock(2)  locks from its parent.)

       *  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 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.

       *  After a fork(2)  in a  multithreaded  program,  the  child  can  safely  call  only  async-signal-safe
          functions (see signal(7))  until such time as it calls execve(2).

       *  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
          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

              A system-imposed limit on the number of threads was encountered. There are a number of limits that
              may trigger this error: the RLIMIT_NPROC soft resource limit (set via setrlimit(2)), which  limits
              the  number  of  processes  and  threads for a real user ID, was reached; the kernel's system-wide
              limit on the number of processes  and  threads,  /proc/sys/kernel/threads-max,  was  reached  (see
              proc(5)); or the maximum number of PIDs, /proc/sys/kernel/pid_max, was reached (see proc(5)).

       EAGAIN The  caller  is  operating  under  the  SCHED_DEADLINE  scheduling  policy  and  does not have the
              reset-on-fork flag set. See sched(7).

       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

       POSIX.1-2001, POSIX.1-2008, SVr4, 4.3BSD.

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.

   Unterschiede C-Bibliothek/Kernel
       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

       Diese Seite ist Teil der Veröffentlichung  4.04  des  Projekts  Linux-man-pages.  Eine  Beschreibung  des
       Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden
       sich unter 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                                           28. Dezember 2015                                        FORK(2)