.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2006 Michael Kerrisk .\" A few fragments remain from an earlier (1992) page by .\" Drew Eckhardt (drew@cs.colorado.edu), .\" .\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. .\" .\" Permission is granted to copy and distribute modified versions of this .\" manual under the conditions for verbatim copying, provided that the .\" entire resulting derived work is distributed under the terms of a .\" permission notice identical to this one. .\" .\" Since the Linux kernel and libraries are constantly changing, this .\" manual page may be incorrect or out-of-date. The author(s) assume no .\" responsibility for errors or omissions, or for damages resulting from .\" the use of the information contained herein. The author(s) may not .\" have taken the same level of care in the production of this manual, .\" which is licensed free of charge, as they might when working .\" professionally. .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. .\" %%%LICENSE_END .\" .\" Modified by Michael Haardt (michael@moria.de) .\" Modified Sat Jul 24 13:22:07 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified 21 Aug 1994 by Michael Chastain (mec@shell.portal.com): .\" Referenced 'clone(2)'. .\" Modified 1995-06-10, 1996-04-18, 1999-11-01, 2000-12-24 .\" by Andries Brouwer (aeb@cwi.nl) .\" Modified, 27 May 2004, Michael Kerrisk .\" Added notes on capability requirements .\" 2006-09-04, Michael Kerrisk .\" Greatly expanded, to describe all attributes that differ .\" parent and child. .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH FORK 2 "28. Mai 2014" Linux Linux\-Programmierhandbuch .SH BEZEICHNUNG fork \- erzeugt einen Kindprozess .SH ÜBERSICHT \fB#include \fP .sp \fBpid_t fork(void);\fP .SH BESCHREIBUNG \fBfork\fP() erzeugt einen neuen Prozess, indem der aufrufende Prozess dupliziert wird. Der neue Prozess wird als das \fIKind\fP bezeichnet. Er ist bis auf die folgenden Punkte eine exakte Kopie des aufrufenden Prozesses (\fIParent\fP): .IP * 3 Das Kind hat seine eigene eindeutige Prozess\-ID, die mit keiner ID irgendeiner existierenden Prozessgruppe übereinstimmt (\fBsetpgid\fP(2)). .IP * Die Parent\-Prozess\-ID des Kindes ist die gleiche wie die Prozess\-ID des Parent\-Prozesses. .IP * Das Kind erbt keine Speichersperren des Parent\-Prozesses (\fBmlock\fP(2), \fBmlockall\fP(2)). .IP * Für das Kind wird die Nutzung von Prozessressourcen (\fBgetrusage\fP(2)) und Zähler für CPU\-Zeiten (\fBtimes\fP(2)) auf null zurückgesetzt. .IP * Der Satz für das Kind anstehender Signale ist anfangs leer (\fBsigpending\fP(2)). .IP * Das Kind erbt keine Semaphor\-Einstellungen von seinem Parent (\fBsemop\fP(2)). .IP * The child does not inherit process\-associated record locks from its parent (\fBfcntl\fP(2)). (On the other hand, it does inherit \fBfcntl\fP(2) open file description locks and \fBflock\fP(2) locks from its parent.) .IP * Das Kind erbt keine Timer von seinem Parent (\fBsetitimer\fP(2), \fBalarm\fP(2), \fBtimer_create\fP(2)). .IP * Das Kind erbt keine ausstehenden asynchronen E/A\-Operationen von seinem Parent (\fBaio_read\fP(3), \fBaio_write\fP(3)), auch asynchrone E/A\-Kontexte des Parents werden nicht vererbt (siehe \fBio_setup\fP(2)). .PP 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: .IP * 3 Das Kind erbt keine Nachrichten über Verzeichnisänderungen (directory change notifications, dnotify) von seinem Parent (siehe die Beschreibung von \fBF_NOTIFY\fP in \fBfcntl\fP(2)). .IP * Die Einstellung \fBPR_SET_PDEATHSIG\fP von \fBprctl\fP(2) wird zurückgesetzt, sodass das Kind kein Signal empfängt, wenn sein Parent terminiert. .IP * Der voreingestellte Wert für den Timer\-Spielraum (»timer slack«) wird auf den aktuellen Timer\-Spielraum des Parents gesetzt. Siehe die Beschreibung von \fBPR_SET_TIMERSLACK\fP in \fBprctl\fP(2). .IP * Speicherabbildungen, die mit dem \fBmadvise\fP(2)\-Flag \fBMADV_DONTFORK\fP markiert wurden, werden nicht über einen Aufruf von \fBfork\fP() hinweg vererbt. .IP * Das Terminierungssignal des Kindes ist immer \fBSIGCHLD\fP (siehe \fBclone\fP(2)). .IP * Die von \fBioperm\fP(2) gesetzten Bits für Portzugriffe werden nicht an das Kind vererbt, stattdessen muss das Kind benötigte Bits mittels \fBioperm\fP(2) aktivieren. .PP Beachten Sie die folgenden weiteren Punkte: .IP * 3 Der Kindprozess wird mit einem einzigen Thread erstellt \(em demjenigen, der \fBfork\fP 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 \fBpthread_atfork\fP(3) kann hilfreich sein für die Behandlung von dadurch verursachten Problemen. .IP * 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 \fBopen\fP(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 \fBF_SETOWN\fP und \fBF_SETSIG\fP in \fBfcntl\fP(2)) gemeinsam nutzen. .IP * 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 \fBmq_overview\fP(7)) wie der entsprechende Deskriptor im Parent. Das bedeutet, dass die beiden Deskriptoren die gleichen Flags (\fImq_flags\fP) gemeinsam nutzen. .IP * Das Kind erbt Kopien des Parent\-Satzes für offene Verzeichnis\-Streams (siehe \fBopendir\fP(3)). POSIX.1\-2001 besagt, dass die entsprechenden Verzeichnis\-Streams auf die gleiche Position zeigen \fIkönnen\fP; unter Linux/Glibc tun sie es nicht. .SH 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 \fIerrno\fP entsprechend gesetzt. .SH FEHLER .TP \fBEAGAIN\fP \fBfork\fP() kann nicht ausreichend Speicher allozieren, um die Page Tables des Parents zu kopieren und einen Task\-Record für den Kindprozess anzulegen. .TP \fBEAGAIN\fP .\" NOTE! The following should match the description in pthread_create(3) A system\-imposed limit on the number of threads was encountered. There are a number of limits that may trigger this error: the \fBRLIMIT_NPROC\fP soft resource limit (set via \fBsetrlimit\fP(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, \fI/proc/sys/kernel/threads\-max\fP, was reached (see \fBproc\fP(5)); or the maximum number of PIDs, \fI/proc/sys/kernel/pid_max\fP, was reached (see \fBproc\fP(5)). .TP \fBEAGAIN\fP The caller is operating under the \fBSCHED_DEADLINE\fP scheduling policy and does not have the reset\-on\-fork flag set. See \fBsched\fP(7). .TP \fBENOMEM\fP \fBfork\fP() konnte wegen Speicherknappheit die erforderlichen Kernel\-Strukturen nicht anlegen. .TP \fBENOSYS\fP .\" e.g., arm (optionally), blackfin, c6x, frv, h8300, microblaze, xtensa \fBfork\fP() wird auf dieser Plattform nicht unterstützt (beispielsweise Hardware ohne eine Memory\-Management Unit). .SH "KONFORM ZU" SVr4, 4.3BSD, POSIX.1\-2001. .SH ANMERKUNGEN .PP Unter Linux ist \fBfork\fP() mittels »copy\-on\-write«\-Seiten implementiert, sodass der einzige Nachteil von \fBfork\fP() 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. .\" nptl/sysdeps/unix/sysv/linux/fork.c .\" and does some magic to ensure that getpid(2) returns the right value. Der Glibc\-Wrapper für \fBfork\fP() wird als Teil der NPTL\-Threading\-Implementierung bereitgestellt. Seit Version 2.3.3 der Glibc ruft der \fBfork\fP()\-Wrapper nicht mehr den Kernel\-Systemaufruf \fBfork\fP() auf, sondern \fBclone\fP(2) mit Flags, die das Gleiche bewirken wie der traditionelle Systemaufruf. (Ein Aufruf von \fBfork\fP() ist gleichbedeutend mit einem Aufruf von \fBclone\fP(2), bei dem für \fIflags\fP nur \fBSIGCHLD\fP angegeben wird.) Der Glibc\-Wrapper ruft alle Fork\-Handler auf, die mittels \fBpthread_atfork\fP(3) eingerichtet wurden. .SH BEISPIEL Siehe \fBpipe\fP(2) und \fBwait\fP(2). .SH "SIEHE AUCH" \fBclone\fP(2), \fBexecve\fP(2), \fBexit\fP(2), \fBsetrlimit\fP(2), \fBunshare\fP(2), \fBvfork\fP(2), \fBwait\fP(2), \fBdaemon\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7) .SH KOLOPHON Diese Seite ist Teil der Veröffentlichung 3.74 des Projekts Linux\-\fIman\-pages\fP. 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/. .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze , Martin Eberhard Schauer und Mario Blättermann 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 .