.\" -*- coding: UTF-8 -*- .\" Copyright (C) 2006 Michael Kerrisk .\" A few fragments remain from an earlier (1992) page by .\" Drew Eckhardt (drew@cs.colorado.edu), .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" 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 "3 mei 2023" "Linux man\-pagina's 6.05.01" .SH NAAM fork \- maak een kind\-proces .SH BIBLIOTHEEK Standard C bibliotheek (\fIlibc\fP, \fI\-lc\fP) .SH SAMENVATTING .nf \fB#include \fP .PP \fBpid_t fork(void);\fP .fi .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 \[bu] 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 \[bu] Het ouder proces ID van het kind is hetzelfde als het proces ID van de ouder. .IP \[bu] Het kind erft het slot op het geheugen niet van de ouder (\fBmlock\fP(2), \fBmlockall\fP(2)). .IP \[bu] Gebruik van bronnen (\fBgetrusage\fP(2)) en de CPU tijd tellers (\fBtimes\fP(2)) worden op nul gezet in het kind. .IP \[bu] De verzameling van in afwachting zijnde signalen in kind is leeg (\fBsigpending\fP(2)). .IP \[bu] Het kind erft geen seinpaal aanpassingen van zijn ouder (\fBsemop\fP(2)). .IP \[bu] 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 \[bu] Het kind erft geen timers van zijn ouder (\fBsetitimer\fP(2), \fBalarm\fP(2), \fBtimer_create\fP(2)). .IP \[bu] 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 \[bu] 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 \[bu] De \fBprctl\fP(2) \fBPR_SET_PDEATHSIG\fP wordt teruggezet zodat het kind geen signaal ontvangt wanneer zijn ouder stopt. .IP \[bu] 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 \[bu] De geheugen indelingen die werden gemarkeerd met de \fBmadvise\fP(2) \fBMADV_DONTFORK\fP vlag worden niet overgeërfd langs \fBfork\fP(). .IP \[bu] 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 \[bu] Het beëindiging signaal van het kind is altijd \fBSIGCHLD\fP (zie \fBclone\fP(2)). .IP \[bu] 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 \[bu] 3 Het kind\-proces wordt gemaakt met een enkele thread\[em]die 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 \[bu] 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 \[bu] 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 \[bu] 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 \[bu] 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 \[bu] 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 \[bu] 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 \[bu] het maximaal aantal PID´s, \fI/proc/sys/kernel/pid_max\fP, werd bereikt (zie \fBproc\fP(5)); of .IP \[bu] 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 VERSIES .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. Vanaf glibc 2.3.3, in plaats van het aanroepen van de \fBfork\fP() systeem aanroep, roept 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). .SH "VOLDOET AAN" POSIX.1\-2008. .SH GESCHIEDENIS POSIX.1\-2001, 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. .SH VOORBEELDEN Zie \fBpipe\fP(2) en \fBwait\fP(2) voor meer voorbeelden. .PP .\" SRC BEGIN (fork.c) .EX #include #include #include #include #include \& int main(void) { pid_t pid; \& if (signal(SIGCHLD, SIG_IGN) == SIG_ERR) { perror("signal"); exit(EXIT_FAILURE); } pid = fork(); switch (pid) { case \-1: perror("fork"); exit(EXIT_FAILURE); case 0: puts("Child exiting."); exit(EXIT_SUCCESS); default: printf("Child is PID %jd\en", (intmax_t) pid); puts("Parent exiting."); exit(EXIT_SUCCESS); } } .EE .\" SRC END .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) .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 .