.\" -*- coding: UTF-8 -*- .\" Copyright 1993, Thomas Koenig .\" Copyright 2004, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH wait 2 "8. februar 2026" "Linux man\-pages 6.17" .SH NAVN wait, waitpid, waitid \- vent på at processen ændrer tilstand .SH BIBLIOTEK C\-standardbibliotek (\fIlibc\fP,\ \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP .P \fBpid_t wait(int *_Nullable \fP\fIwstatus\fP\fB);\fP \fBpid_t waitpid(pid_t \fP\fIpid\fP\fB, int *_Nullable \fP\fIwstatus\fP\fB, int \fP\fItilvalg\fP\fB);\fP .P \fBint waitid(idtype_t \fP\fIidtype\fP\fB, id_t \fP\fIid\fP\fB, siginfo_t *\fP\fIinfop\fP\fB, int \fP\fIoptions\fP\fB);\fP /* Dette er glibc\- og POSIX\-grænsefladen; se VERSIONS for information om det rå systemkald. */ .fi .P .RS -4 Feature Test Macro Requirements for glibc (se \fBfeature_test_macros\fP(7)): .RE .P \fBwaitid\fP(): .nf .\" (_XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED) Siden glibc 2.26: _XOPEN_SOURCE >= 500 || _POSIX_C_SOURCE >= 200809L glibc 2.25 og tidligere: _XOPEN_SOURCE || /* Siden glibc 2.12: */ _POSIX_C_SOURCE >= 200809L || /* glibc <= 2.19: */ _BSD_SOURCE .fi .SH BESKRIVELSE Alle disse systemkald bruges til at vente på tilstandsændringer i en underproces af den kaldende proces, og hente information om underprocessen, hvis tilstand har ændret sig. En tilstandsændring anses for at være: underprocessen afsluttedes; underprocessen blev stoppet af et signal; eller underprocessen blev genoptaget af et signal. I tilfældet med en afsluttet underproces vil udførelse af en wait gøre det muligt for systemet at frigive ressourcerne associeret med underprocessen; hvis en wait ikke udføres, så bliver den afsluttede underproces i en »zombie«\-tilstand (se NOTES nedenfor). .P Hvis en underproces allerede har ændret tilstand, så returneres disse kald øjeblikkeligt. ellers blokerer de indtil en underproces ændrer tilstand eller en signalhåndtering afbryder kaldet (under antagelse af at systemkaldene ikke automatisk genstartes via flaget \fBSA_RESTART\fP for \fBsigaction\fP(2)). På resten af denne side vil en underproces, hvis tilstand har ændret sig og endnu ikke har modtaget en wait af et af disse systemkald blive kaldt for \fIwaitable\fP. .SS "wait() og waitpid()" Systemkaldet \fBwait\fP() suspenderer afviklingen af den kaldende tråd indtil en af dens underprocesser afsluttes. Kaldet \fIwait(&wstatus)\fP svarer til: .P .in +4n .EX waitpid(\-1, &wstatus, 0); .EE .in .P Systemkaldet \fBwaitpid\fP() suspenderer afviklingen af den kaldende tråd indtil en underproces angivet af argumentet \fIpid\fP har ændret tilstand. Som standard venter \fBwaitpid\fP() kun på afsluttede underprocesser, men denne opførsel kan ændres via argumentet \fIoptions\fP, som beskrevet nedenfor. .P Værdien af \fIpid\fP kan være: .TP < \fB\-1\fP vent på nehver underproces hvis procesgruppe\-id svarer til den absolutte værdi for \fIpid\fP. .TP \fB\-1\fP vent på enhver underproces. .TP \fB0\fP vent på enhver underproces hvis procesgruppe\-id svarer til den kaldende proces på tidspunktet for kaldet til \fBwaitpid\fP(). .TP > \fB0\fP vent på underprocessen hvis proces\-id svarer til værdien for \fIpid\fP. .P Værdien af \fItilvalg\fP er en OR af nul eller flere af de følgende konstanter: .TP \fBWNOHANG\fP returner øjeblikkeligt hvis ingen underproces er afsluttet. .TP \fBWUNTRACED\fP returnerer også hvis en underproces er stoppet (men ikke sporet via \fBptrace\fP(2)). Status for \fItraced\fP\-underprocesser, der er stoppet tilbydes selv om denne mulighed ikke er angivet. .TP \fBWCONTINUED\fP (siden Linux 2.6.10) returnerer også hvis en stoppet underproces er blevet genoptaget ved levering af \fBSIGCONT\fP. .P (For tilvalg kun for Linux, se nedenfor). .P Hvis \fIwstatus\fP er NULL så lagrer \fBwait\fP() og \fBwaitpid\fP() statusinformation i den \fIint\fP der peges på. Dette heltal kan inspiceres med de følgende makroer (der bruger selve heltallet som et argument, ikke en tekstsøger, som det gøres i \fBwait\fP() og \fBwaitpid\fP()!): .TP \fBWIFEXITED(\fP\fIwstatus\fP\fB)\fP returnerer true (sand) hvis underprocesen blev afsluttet normalt, det vil sige, ved at kalde \fBexit\fP(3) eller \fB_exit\fP(2), eller ved at returnere fra main(). .TP \fBWEXITSTATUS(\fP\fIwstatus\fP\fB)\fP returnerer afslutningsstatus for underprocessen. Denne består af de mindst signifikante 8 bit for argumentet \fIstatus\fP, som underprocessen angav i et kald til \fBexit\fP(3) eller \fB_exit\fP(2) eller som argumentet for et returudtryk i main(). Denne makro bør kun udrulles hvis \fBWIFEXITED\fP returnerede true (sand). .TP \fBWIFSIGNALED(\fP\fIwstatus\fP\fB)\fP returnerer true (sand) hvis underprocessen blev afsluttet af et signal. .TP \fBWTERMSIG(\fP\fIwstatus\fP\fB)\fP returnerer nummeret for signalet, der medførte at underprocessen blev afsluttet. Denne makro bør kun anvendes hvis \fBWIFSIGNALED\fP returnerede true (sand). .TP \fBWCOREDUMP(\fP\fIwstatus\fP\fB)\fP\fI \fP\f[R]// POSIX.1\-2024\fR returnerer true (sand) hvis underprocessen fremstillede et kernedump (se \fBcore\fP(5)). Denne makro skal kun bruges hvis \fBWIFSIGNALED\fP returnede true. .TP \fBWIFSTOPPED(\fP\fIwstatus\fP\fB)\fP\fI \fP\f[R]// POSIX.1\-2024\fR returnerer true (sand) hvis underprocessen blev stoppet af en levering af et signal; dette er kun muligt hvis kaldet blev udført via \fBWUNTRACED\fP eller når underprocessen bliver sporet (se \fBptrace\fP(2)). .TP \fBWSTOPSIG(\fP\fIwstatus\fP\fB)\fP returnerer nummeret for signalet som fik underprocessen til at stoppe. Denne makro bør kun bruges hvis \fBWIFSTOPPED\fP returnerede true. .TP \fBWIFCONTINUED(\fP\fIwstatus\fP\fB)\fP (siden Linux 2.6.10) returnerer true (sand) hvis underprocessen blev genoptaget ved levering af \fBSIGCONT\fP. .SS waitid() Systemkaldet \fBwaitid\fP() (tilgængelig siden Linux 2.6.9) tilbyder mere præcis kontrol over hvilke tilstandændringer for underprocesser, der skal ventes på. .P Argumenterne \fIidtype\fP og \fIid\fP vælger underprocesserne, der skal ventes på, som følgende: .TP \fIidtype\fP == \f[B]P_PID\fR Vent på underprocessen hvis proces\-id matcher \fIid\fP. .TP \fIidtype\fP == \f[B]P_PIDFD\fR (siden Linux 5.4) .\" commit 3695eae5fee0605f316fbaad0b9e3de791d7dfaf Vent for underprocessen refereret til af PID\-fildeskriptoren angivet i \fIid\fP. (Se \fBpidfd_open\fP(2) for yderligere information om PID\-fildeskriptorer). .TP \fIidtype\fP == \f[B]P_PGID\fR .\" commit 821cc7b0b205c0df64cce59aacc330af251fa8f7 Vent på en underproces hvis procesgruppe\-id machter \fIid\fP. Siden Linux 5.4, hvis \fIid\fP er nul, så vent på eventuelle underprocesser, der er i den samme procesgruppe som kalderens procesgruppe på tidspunktet for kaldet. .TP \fIidtype\fP == \f[B]P_ALL\fR Vent på en eventuel underproces; \fIid\fP bliver ignoreret. .P Underprocestilstanden ændres til vent på er angivet af ORing en eller flere af de følgende flag i \fIoptions\fP: .TP \fBWEXITED\fP Vent på underprocesser der er afsluttet. .TP \fBWSTOPPED\fP Vent på underprocesser der er blevet stoppet af en signallevering. .TP \fBWCONTINUED\fP Vent på (tidligere stoppet) underproces, der er blevet genoptaget ved levering af \fBSIGCONT\fP. .P De følgende flag kan yderligere blive ORed i \fIoptions\fP: .TP \fBWNOHANG\fP Som for \fBwaitpid\fP(). .TP \fBWNOWAIT\fP Efterlad underprocessen i en ventende tilstand; et senere vente\-kald kan bruges til igen at hente underprocessens statusinformation. .P Ved succesfuld returnering udfylder \fBwaitid\fP() de følgende felter i strukturen \fIsiginfo_t\fP peget mod af \fIinfop\fP: .TP \fIsi_pid\fP Proces\-id for underprocessen. .TP \fIsi_uid\fP Det reelle bruger\-id for underprocessen. (Dette felt er ikke angivet på de fleste implementeriner). .TP \fIsi_signo\fP Angiv altdi som \fBSIGCHLD\fP. .TP \fIsi_status\fP Enten afslutningsstatus for underprocessen, som angivet til \fB_exit\fP(2) (eller \fBexit\fP(3)), eller signalet der medførte at underprocessen blev afsluttet, stoppet eller fortsatte. Feltet \fIsi_code\fP kan bruges til at bestemme hvordan dette felt skal fortolkes. .TP \fIsi_code\fP Angiv til en af: \fBCLD_EXITED\fP (underproces kaldt \fB_exit\fP(2)); \fBCLD_KILLED\fP (underproces dræbt af signal); \fBCLD_DUMPED\fP (underproces dræbt af signal, og dumpet kerne); \fBCLD_STOPPED\fP (underproces stoppet af signal); \fBCLD_TRAPPED\fP (sporet underproces er fanget); eller \fBCLD_CONTINUED\fP (underproces forsat af \fBSIGCONT\fP). .P Hvis \fBWNOHANG\fP blev angivet i \fItilvalg\fP og der ingen underprocesser var i en ventende tilstand, så returnerer \fBwaitid\fP() 0 øjeblikkeligt og tilstanden for strukturen \fIsiginfo_t\fP pegende mod \fIinfop\fP afhænger af implementeringen. For (flytbart) at skelne dette tilfælde fra hvor en underproces var i en ventende tilstand, nulstil feltet \fIsi_pid\fP før kaldet og tjek for en værdi forskellig fra nul i dettte felt efter kaldet returnerer. .P .\" POSIX.1-2001 leaves this possibility unspecified; most .\" implementations (including Linux) zero out the structure .\" in this case, but at least one implementation (AIX 5.1) .\" does not -- MTK Nov 04 POSIX.1\-2008 Technical Corrigendum 1 (2013) tilføjer kravet at når \fBWNOHANG\fP er angivet i \fItilvalg\fP og der er ingen underproces i en ventende tilstand, så bør \fBwaitid\fP() nulstille felterne \fIsi_pid\fP og \fIsi_signo\fP for strukturen. På Linux og andre implementeringer, der overholder dette krav, er det ikke nødvendigt at nulstille feltet \fIsi_pid\fP før \fBwaitid\fP() kaldes. Alle implementeringer følger dog ikke POSIX.1\-specifikationen på dette tidspunkt. .SH RETURVÆRDI \fBwait\fP(): ved succes, returneres proces\-id'et for den afsluttede underproces; ved fejl returneres \-1. .P \fBwaitpid\fP(): ved succes returneres proces\-id'et for underprocessen hvis tilstand har ændret sig; hvis \fBWNOHANG\fP blev angivet og en eller flere underprocesser angivet af \fIpid\fP findes, men endnu ikke har ændret tilstand, så returneres 0. Ved fejl returneres \-1. .P .\" FIXME As reported by Vegard Nossum, if infop is NULL, then waitid() .\" returns the PID of the child. Either this is a bug, or it is intended .\" behavior that needs to be documented. See my Jan 2009 LKML mail .\" "waitid() return value strangeness when infop is NULL". \fBwaitid\fP(): returnerer 0 ved succes eller hvis \fBWNOHANG\fP var angivet og ingen underproces angivet af \fIid\fP endnu ikke har ændret tilstand; ved fejl returneres \-1. .P Ved fejl, angiver hvert af disse kald \fIerrno\fP for at indikere fejlen. .SH FEJL .TP \fBEAGAIN\fP PID\-fildeskriptoren angivet i \fIid\fP er ikkeblokerende og processen den referer til er ikke afsluttet. .TP \fBECHILD\fP (for \fBwait\fP()) Den kaldende proces har ingen ej ventet for underproces. .TP \fBECHILD\fP (for \fBwaitpid\fP() eller \fBwaitid\fP()) Processen angivet af \fIpid\fP (\fBwaitpid\fP()) eller \fIidtype\fP og \fIid\fP (\fBwaitid\fP()) findes ikke eller er ikke en underproces af den kaldende proces. (Dette kan ske for ens egen underproces hvis handlingen for \fBSIGCHLD\fP er angivet til \fBSIG_IGN\fP. Se også afsnittet \fILinux Notes\fP om tråde). .TP \fBEINTR\fP \fBWNOHANG\fP var ikke angivet og et ej blokeret signal eller en \fBSIGCHLD\fP blev opfanget; se \fBsignal\fP(7). .TP \fBEINVAL\fP Argumentet \fItilvalg\fP var ugyldigt. .TP \fBESRCH\fP (for \fBwait\fP() eller \fBwaitpid\fP()) svarer \fIpid\fP til \fBINT_MIN\fP. .SH VERSIONER .SS C\-bibliotek/kerne\-forskelle \fBwait\fP() er faktisk en biblioteksfunktion der (i glibc) er implementeret som et kald til \fBwait4\fP(2). .P .\" e.g., i386 has the system call, but not x86-64 På nogle arkitekturer er det intet \fBwaitpid\fP()\-systemkald; i stedet for er denne grænseflade implementeret via en C\-biblioteksomslagsfunktion, der kalder \fBwait4\fP(2). .P Det rå systemkald \fBwaitid\fP() anvender et femte argument, af typen \fIstruct rusage\ *\fP. Hvis dette argument er forskellig fra NULL, så bruges det til at returnere information om ressourceforbrug for underprocessen, på samme måde som \fBwait4\fP(2). Se \fBgetrusage\fP(2) for detaljer. .SH STANDARDER POSIX.1\-2024. .SH HISTORIK SVr4, 4.3BSD, POSIX.1\-2001. .SH NOTER En underproces der afsluttes, men der ikke er blevet ventet på bliver en »zombie«. Kernen vedligeholder et minimum af information om zombieprocessen (PID, afslutningsstatus, information om ressourceforbrug) for at overprocessen senere kan udføre en wait for at få information om underprocessen. Så længe en zombie ikke fjernes fra systemet via en wait, så vil den bruge en plads i kerneprocestabellen og hvis denne tabel bliver fyldt, så vil der ikke længere kunne oprettes yderligere processer. Hvis en overproces afsluttes, så bliver dens (hvis nogen) »zombieprocesser« adopteret af \fBinit\fP(1), (eller af den nærmeste »subreaper«\-proces som defineret via brugen af \fBprctl\fP(2) \fBPR_SET_CHILD_SUBREAPER\fP\-operationen); \fBinit\fP(1) udfører automatisk en wait for at fjerne zombierne. .P POSIX.1\-2001 angiver at hvis dispositionen af \fBSIGCHLD\fP er angivet til \fBSIG_IGN\fP eller flaget \fBSA_NOCLDWAIT\fP er angivet for \fBSIGCHLD\fP (se \fBsigaction\fP(2)), så bliver underprocessen, der afsluttes, ikke en zombie og et kald til \fBwait\fP() eller \fBwaitpid\fP() vil blokere indtil alle underprocesser er afsluttet, og så fejle med \fIerrno\fP angivet til \fBECHILD\fP. (Den oprindelige POSIX\-standard efterlod opførelsen med at angive \fBSIGCHLD\fP til \fBSIG_IGN\fP uspecificeret. Bemærk at selvom standarddispositionen for \fBSIGCHLD\fP er »ignore« (ignorer), så medfører eksplicit angivelse af dispositionen til \fBSIG_IGN\fP forskellig behandling af zombieunderprocesser). .P Linux 2.6 overholder POSIX\-kravene. Linux 2.4 (og tidligere) gør dog ikke: hvis et \fBwait\fP()\- eller \fBwaitpid\fP()\-kald laves mens \fBSIGCHLD\fP bliver ignoreret, så opfører kaldet sig som at \fBSIGCHLD\fP ikke blev ignoreret, det vil sige, kaldet blokeres indtil den næste underproces afsluttes og returnerer så proces\-id'et og status for den underproces. .SS Linux\-noter I Linuxkernen er en kerneplanlagt tråd ikke en distinkt konstruktion fra en proces. I stedet er en tråd bare en proces, der oprettes via det Linux\-unikke systemkald \fBclone\fP(2); andre rutiner såsom det flytbare kald \fBpthread_create\fP(3) implementeres via \fBclone\fP(2). Før Linux 2.4 var en tråd bare en speciel proces og som konsekvens kunne en tråd ikke vente på underprocessen i en anden tråd, selv om den sidstnævnte tilhører den samme trådgruppe. POSIX foreskriver dog sådan funktionalitet, og siden Linux 2.4 kan en tråd, og vil som standard, vente på underprocesser i andre tråde i den samme trådgruppe. .P .\" commit 91c4e8ea8f05916df0c8a6f383508ac7c9e10dba De følgende Linux\-specifikke \fItilvalg\fP er for brug med underproces oprettet via \fBclone\fP(2); de kan også, siden Linux 4.7, bruges med \fBwaitid\fP(): .TP \fB__WCLONE\fP .\" since 0.99pl10 Vent kun på »klon«\-underproces. Hvis udeladt så vent kun på »ikke\-klon«\-underproces. (En »klon«\-underproces er en der ikke leverer et signal, eller et signal udover \fBSIGCHLD\fP til sin overproces ved afslutning). Dette tilvalg ignoreres hvis \fB__WALL\fP også er angivet. .TP \fB__WALL\fP (siden Linux 2.4) .\" since patch-2.3.48 Vent på alle underprocesser, uanset typen (»clone« eller »non\-clone«). .TP \fB__WNOTHREAD\fP (siden Linux 2.4) .\" since patch-2.4.0-test8 Vent ikke på underprocesser for andre tråde i den samme trådgruppe. Dette var standarden før Linux 2.4. .P .\" commit bf959931ddb88c4e4366e96dd22e68fa0db9527c .\" prevents cases where an unreapable zombie is created if .\" /sbin/init doesn't use __WALL. Siden Linux 4.7, antages flaget \fB__WALL\fP automatisk hvis underprocessen bliver ptraced. .SH FEJL Jævnfør POSIX.1\-2008 skal et program der kalder \fBwaitid\fP() sikre at \fIinfop\fP peger på en \fIsiginfo_t\fP\-struktur (dvs. at det er tekstsøger forskellig fra nul). På Linux, hvis \fIinfop\fP er nul, så lykkes \fBwaitid\fP() og returnerer proces\-id'et for den ventet på\-underproces. Programmer bør undgå at afhænge af denne inkonsistens, uden for standarden og unødvendige funktion. .SH EKSEMPLER .\" fork.2 refers to this example program. Det følgende program demonstrerer brugen af \fBfork\fP(2) og \fBwaitpid\fP(). Programmet opretter en underproces. Hvis intet kommandolinjeargument leveres til programmet, så suspenderer underprocessen dens afvikling via \fBpause\fP(2), for at tillade at brugeren kan sende signaler til underprocessen. Ellers, hvis et kommandolinjeargument anvendes, så afsluttes underprocessen øjeblikkeligt, via heltalet angivet på kommandolinjen som afslutningsstatus. Overprocessen afvikler en løkke, der overvåger underprocessen via \fBwaitpid\fP(), og bruger W*()\-makroer beskrevet ovenfor til at analysere wait\-statusværdien. .P Den følgende skalsession demonstrerer brugen af programmet: .P .in +4n .EX $\fB ./a.out &\fP Child PID is 32360 [1] 32359 $\fB kill \-STOP 32360\fP stopped by signal 19 $\fB kill \-CONT 32360\fP continued $\fB kill \-TERM 32360\fP killed by signal 15 [1]+ Done ./a.out $ .EE .in .SS Programkilde .\" SRC BEGIN (wait.c) \& .EX #include #include #include #include #include #include \& int main(int argc, char *argv[]) { int wstatus; pid_t cpid, w; \& cpid = fork(); if (cpid == \-1) { perror("fork"); exit(EXIT_FAILURE); } \& if (cpid == 0) { /* Kode afviklet af underproces */ printf("Child PID is %jd\[rs]n", (intmax_t) getpid()); if (argc == 1) pause(); /* Vent på signaler */ _exit(atoi(argv[1])); \& } else { /* Kode afviklet af overproces */ do { w = waitpid(cpid, &wstatus, WUNTRACED | WCONTINUED); if (w == \-1) { perror("waitpid"); exit(EXIT_FAILURE); } \& if (WIFEXITED(wstatus)) { printf("exited, status=%d\[rs]n", WEXITSTATUS(wstatus)); } else if (WIFSIGNALED(wstatus)) { printf("killed by signal %d\[rs]n", WTERMSIG(wstatus)); } else if (WIFSTOPPED(wstatus)) { printf("stopped by signal %d\[rs]n", WSTOPSIG(wstatus)); } else if (WIFCONTINUED(wstatus)) { printf("continued\[rs]n"); } } while (!WIFEXITED(wstatus) && !WIFSIGNALED(wstatus)); exit(EXIT_SUCCESS); } } .EE .\" SRC END .SH "SE OGSÅ" \fB_exit\fP(2), \fBclone\fP(2), \fBfork\fP(2), \fBkill\fP(2), \fBptrace\fP(2), \fBsigaction\fP(2), \fBsignal\fP(2), \fBwait4\fP(2), \fBpthread_create\fP(3), \fBcore\fP(5), \fBcredentials\fP(7), \fBsignal\fP(7) .PP .SH OVERSÆTTELSE Oversættere af denne manual til dansk Joe Hansen . .PP Denne oversættelse er gratis dokumentation; læs .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. .PP Hvis du støder på fejl i oversættelsen af ​​denne vejledning, skal du sende en besked til .MT debian-l10n-danish@lists.debian.org .ME .