.\" -*- 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 "9 juni 2020" Linux "Linux Programmeurs Handleiding" .SH NAAM fork \- maak een kind\-proces .SH SAMENVATTING \fB#include \fP .br \fB#include \fP .PP \fBpid_t fork(void);\fP .SH BESCHRIJVING \fBfork\fP() maakt een nieuw proces aan door het huidige proces te dupliceren. Het nieuwe proces wordt het kind\-proces genoemd. Het huidige proces wordt het \fIouder\fP proces genoemd. .PP Het kind\-proces en het ouder\-proces draaien in aparte geheugen ruimten. Tijdens de \fBfork\fP() hebben beide geheugen gebieden dezelfde inhoud. Schrijven naar geheugen, afbeelden (\fBmmap\fP(2)) en vrijgeven (\fBmunmap\fP(2)) van bestanden door een van de processen beïnvloeden het andere niet. .PP Het kind\-proces is een exact duplicaat van het ouder\-proces behalve de volgende punten: .IP * 3 Het kind heeft zijn eigen unieke proces ID en dit PID komt niet overeen met enig ID van een van de bestaande proces groepen ( (\fBsetpgid\fP(2)) of sessie. .IP * Het ouder proces ID van het kind is hetzelfde als het proces ID van de ouder. .IP * Het kind erft het slot op het geheugen niet van de ouder (\fBmlock\fP(2), \fBmlockall\fP(2)). .IP * Gebruik van bronnen (\fBgetrusage\fP(2)) en de CPU tijd tellers (\fBtimes\fP(2)) worden op nul gezet in het kind. .IP * De verzameling van in afwachting zijnde signalen in kind is leeg (\fBsigpending\fP(2)). .IP * Het kind erft geen seinpaal aanpassingen van zijn ouder (\fBsemop\fP(2)). .IP * Het kind erft geen geassocieerde dossier sloten van zijn ouder \fBfcntl\fP(2)). (Aan de andere kant erft het wel \fBfnctl\fP(2) de open bestandsindicator sloten en de \fBflock\fP(2) van zijn ouder.) .IP * Het kind erft geen timers van zijn ouder (\fBsetitimer\fP(2), \fBalarm\fP(2), \fBtimer_create\fP(2)). .IP * Het kind erft geen uitstaande asynchrone Invoer/Uitvoer operatie van zijn ouder (\fBaio_read\fP(3), \fBaio_write\fP(3)), noch erft het enige asynchrone Invoer/Uitvoer contexts van zijn ouder (zie \fBio_setup\fP(2)). .PP De proces attributen in de voorafgaande lijst zijn allemaal gespecificeerd in POSIX.1. De ouder en het kind verschillen op met betrekking tot de volgende Linux\-specifieke proces attributen: .IP * 3 Het kind erft geen meldingen over verandering in mappen (dnotify) van zijn ouder (zie de beschrijving van \fBF_NOTIFY\fP in \fBfcntl\fP(2)). .IP * De \fBprctl\fP(2) \fBPR_SET_PDEATHSIG\fP wordt teruggezet zodat het kind geen signaal ontvangt wanneer zijn ouder stopt. .IP * De standaard waarde van de timer speling wordt gezet op de huidige waarde van de ouder. Zie de beschrijving van \fBPR_SET_TIMERSLACK\fP in \fBprctl\fP(2). .IP * De geheugen indelingen die werden gemarkeerd met de \fBmadvise\fP(2) \fBMADV_DONTFORK\fP vlag worden niet overgeërfd langs \fBfork\fP(). .IP * Geheugen in de adres gebieden die werden gemarkeerd met de \fBmadvise\fP(2) \fBMADV_WIPEONFORK\fP vlag wordt met 0\-gevuld in het kind na de \fBfork\fP(). (De\fBMADV_WIPEONFORK\fP instelling blijft van kracht voor deze adres gebieden in het kind) .IP * Het beëindiging signaal van het kind is altijd \fBSIGCHLD\fP (zie \fBclone\fP(2)). .IP * De toegangsrechten bits van de poort gezet door \fBioperm\fP(2) worden niet geërfd door het kind; het kind moet de benodigde bits zelf aan zetten met \fBioperm\fP(2). .PP Let op de volgende punten: .IP * 3 Het kind\-proces wordt gemaakt met een enkele thread\emdie die \fBfork\fP() aanriep. De complete virtuele adresruimte van de ouder wordt gekopieerd in het kind, inclusief de statussen van de seinpalen, de conditie variabelen, en andere pthread objecten; het gebruik van \fBpthread_atfork\fP(3) kan nuttig zijn tijdens het afhandelen van problemen die dit kunnen veroorzaken. .IP * Na een \fBfork\fP() in een multithreaded programma, kan het kind zonder problemen asynchrone\-signaal\-veilige functies aanroepen (zie \fBsignal\-safety\fP(7)) totdat het moment dat \fBexecve\fP(2) wordt aangeroepen. .IP * Het kind erft kopieën van de verzameling open bestandsindicatoren van de ouder. Elke bestandsindicator in het kind wijst naar dezelfde open bestandsindicator (zie \fBopen\fP(2)) als de daarmee overeenkomende bestandsindicator in de ouder. Dit betekent dat de twee open bestandsindicatoren dezelfde open bestandsstatus vlaggen delen, de bestandspositie en de signaal\-gedreven Invoer/Uitvoer attributen (zie de beschrijving van \fBF_SETOWN\fP en \fBF_SETSIG\fP in \fBfcntl\fP(2)). .IP * Het kind erft kopieën van de verzameling open bericht rij\-indicatoren van de ouder (zie \fBmq_overview\fP(7)). Elke bestandsindicator in het kind wijst naar dezelfde open bericht rij\-indicator als de daarmee overeenkomende bestandsindicator in de ouder. Dit betekent dat de twee bestandsindicatoren dezelfde vlaggen \fImq_flags\fP) delen. .IP * Het kind erft kopieën van de verzameling open map stromen van de ouder (zie \fBopendir\fP(3)). POSIX.1 schrijft dat de overeenkomende map stromen in de ouder en het kind dezelfde map stroom posities \fImogen\fP delen; op Linux/glibc doen ze dit niet. .SH "EIND WAARDE" Bij succes wordt de PID van het kind\-proces teruggegeven aan het ouder\-proces en wordt 0 teruggegeven in het kind\-proces. Bij falen wordt \-1 teruggegeven aan het ouder\-proces, er wordt geen kind\-proces gemaakt, en \fIerrno\fP wordt overeenkomstig gezet. .SH FOUTEN .TP \fBEAGAIN\fP .\" NOTE! The following should match the description in pthread_create(3) Een door het systeem bepaalde limiet op het aantal threads werd tegengekomen. Er zijn verschillende limieten die deze fout kunnen oproepen: .RS .IP * 3 de \fBRLIMIT_NPROC\fP zachte bron limiet (ingesteld via \fBsetrlimit\fP(2)), die het aantal processen en threads voor het echte gebruikers ID limiteert, werd bereikt; .IP * de systeem\-brede limiet van de kernel op het aantal processen en threads, \fI/proc/sys/kernel/threads\-max\fP, werd bereikt (zie \fBproc\fP(5)); .IP * het maximaal aantal PID´s, \fI/proc/sys/kernel/pid_max\fP, werd bereikt (zie \fBproc\fP(5)); of .IP * de PID limiet (\fIpids.max\fP) opgelegd door de cgroup "proces nummer" (PID´s) controller werd bereikt. .RE .TP \fBEAGAIN\fP De aanroeper werkt onder het \fBSCHED_DEADLINE\fP agendabeheer beleid en heeft niet de reset\-on\-fork vlag gezet. Zie \fBsched\fP(7). .TP \fBENOMEM\fP \fBfork\fP() faalde in het vrijmaken van de nodige kernel structuren omdat er te weinig geheugen was. .TP \fBENOMEM\fP Een poging werd gedaan om een kind\-proces aan te maken in de PID naamruimte wiens "init" proces werd beëindigd. Zie \fBpid_namespaces\fP(7). .TP \fBENOSYS\fP .\" e.g., arm (optionally), blackfin, c6x, frv, h8300, microblaze, xtensa \fBfork\fP() is niet ondersteund op dit platform (bij voorbeeld: hardware zonder een Memory\-Management Unit). .TP \fBERESTARTNOINTR\fP (sinds Linux 2.6.17) .\" commit 4a2c7a7837da1b91468e50426066d988050e4d56 De systeem aanroep werd onderbroken door een signaal en wordt geherstart. (Dit kan alleen geobserveerd worden tijdens een trace.) .SH "VOLDOET AAN" POSIX.1\-2001, POSIX.1\-2008, SVr4, 4.3BSD. .SH OPMERKINGEN Onder Linux is \fBfork\fP() geïmplementeerd door gebruik te maken van copy\-on\-write pagina´s, de enige straf die dit mee brengt is de benodigde tijd en hoeveelheid geheugen die nodig is om de pagina tabellen van de ouder te dupliceren, en om een unieke taak structuur in het kind te maken. .SS "C library/kernel verschillen" .\" nptl/sysdeps/unix/sysv/linux/fork.c .\" and does some magic to ensure that getpid(2) returns the right value. In plaats van het aanroepen van de kernel´ \fBfork\fP() systeem aanroep, roept vanaf versie 2.3.3 de glibc \fBfork\fP() omwikkel functie, die voorzien is als onderdeel van de NPTL threading implementatie, \fBclone\fP(2) aan met vlaggen die hetzelfde effect geven als de traditionele systeem aanroep. (Een aanroep van \fBfork\fP() is equivalent met de aanroep van \fBclone\fP(2) waarbij de \fIflags\fP gespecificeerd wordt als precies \fBSIGCHLD\fP.) De glibc functie roept enig vork afhandelaars aan die werden vastgesteld door \fBpthread_atfork\fP(3) te gebruiken. .SH VOORBEELDEN Zie \fBpipe\fP(2) en \fBwait\fP(2). .SH "ZIE OOK" \fBclone\fP(2), \fBexecve\fP(2), \fBexit\fP(2), \fBsetrlimit\fP(2), \fBunshare\fP(2), \fBvfork\fP(2), \fBwait\fP(2), \fBdaemon\fP(3), \fBpthread_atfork\fP(3), \fBcapabilities\fP(7), \fBcredentials\fP(7) .SH COLOFON Deze pagina is onderdeel van release 5.10 van het Linux \fIman\-pages\fP\-project. Een beschrijving van het project, informatie over het melden van bugs en de nieuwste versie van deze pagina zijn op \%https://www.kernel.org/doc/man\-pages/ te vinden. .PP .SH VERTALING De Nederlandse vertaling van deze handleiding is geschreven door Jos Boersema , Mario Blättermann en Luc Castermans . .PP Deze vertaling is vrije documentatie; lees de .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE of later over de Copyright-voorwaarden. Er is geen AANSPRAKELIJKHEID. .PP Indien U fouten in de vertaling van deze handleiding zou vinden, stuur een e-mail naar .MT debian-l10n-dutch@lists.debian.org .ME .