]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/wait.2
Fix redundant formatting macros
[thirdparty/man-pages.git] / man2 / wait.2
CommitLineData
fea681da
MK
1.\" Hey Emacs! This file is -*- nroff -*- source.
2.\"
1130df60 3.\" Copyright (c) 1993 by Thomas Koenig <ig25@rz.uni-karlsruhe.de>
c11b1abf 4.\" and Copyright (c) 2004 by Michael Kerrisk <mtk.manpages@gmail.com>
fea681da
MK
5.\"
6.\" Permission is granted to make and distribute verbatim copies of this
7.\" manual provided the copyright notice and this permission notice are
8.\" preserved on all copies.
9.\"
10.\" Permission is granted to copy and distribute modified versions of this
11.\" manual under the conditions for verbatim copying, provided that the
12.\" entire resulting derived work is distributed under the terms of a
13.\" permission notice identical to this one.
c13182ef 14.\"
fea681da
MK
15.\" Since the Linux kernel and libraries are constantly changing, this
16.\" manual page may be incorrect or out-of-date. The author(s) assume no
17.\" responsibility for errors or omissions, or for damages resulting from
18.\" the use of the information contained herein. The author(s) may not
19.\" have taken the same level of care in the production of this manual,
20.\" which is licensed free of charge, as they might when working
21.\" professionally.
c13182ef 22.\"
fea681da
MK
23.\" Formatted or processed versions of this manual, if unaccompanied by
24.\" the source, must acknowledge the copyright and authors of this work.
25.\" License.
26.\"
27.\" Modified Sat Jul 24 13:30:06 1993 by Rik Faith <faith@cs.unc.edu>
28.\" Modified Sun Aug 21 17:42:42 1994 by Rik Faith <faith@cs.unc.edu>
29.\" (Thanks to Koen Holtman <koen@win.tue.nl>)
30.\" Modified Wed May 17 15:54:12 1995 by Rik Faith <faith@cs.unc.edu>
31.\" To remove *'s from status in macros (Thanks to Michael Shields).
32.\" Modified as suggested by Nick Duffek <nsd@bbc.com>, aeb, 960426
33.\" Modified Mon Jun 23 14:09:52 1997 by aeb - add EINTR.
34.\" Modified Thu Nov 26 02:12:45 1998 by aeb - add SIGCHLD stuff.
35.\" Modified Mon Jul 24 21:37:38 2000 by David A. Wheeler
36.\" <dwheeler@dwheeler.com> - noted thread issues.
37.\" Modified 26 Jun 01 by Michael Kerrisk
38.\" Added __WCLONE, __WALL, and __WNOTHREAD descriptions
39.\" Modified 2001-09-25, aeb
c11b1abf 40.\" Modified 26 Jun 01 by Michael Kerrisk, <mtk.manpages@gmail.com>
fea681da 41.\" Updated notes on setting disposition of SIGCHLD to SIG_IGN
599be3ee
MK
42.\" 2004-11-11, mtk
43.\" Added waitid(2); added WCONTINUED and WIFCONTINUED()
f2351505 44.\" Added text on SA_NOCLDSTOP
d9bfdb9c 45.\" Updated discussion of SA_NOCLDWAIT to reflect 2.6 behavior
f2351505 46.\" Much other text rewritten
948fb4ed 47.\" 2005-05-10, mtk, __W* flags can't be used with waitid()
fea681da 48.\"
cc4615cc 49.TH WAIT 2 2007-07-26 "Linux" "Linux Programmer's Manual"
fea681da 50.SH NAME
0bfa087b 51wait, waitpid, waitid \- wait for process to change state
fea681da
MK
52.SH SYNOPSIS
53.B #include <sys/types.h>
54.br
55.B #include <sys/wait.h>
56.sp
57.BI "pid_t wait(int *" "status" );
58.br
59.BI "pid_t waitpid(pid_t " pid ", int *" status ", int " options );
f2351505 60.br
c10859eb
MK
61.BI "int waitid(idtype_t " idtype ", id_t " id \
62", siginfo_t *" infop ", int " options );
cc4615cc
MK
63.sp
64.in -4n
65Feature Test Macro Requirements for glibc (see
66.BR feature_test_macros (7)):
67.in
68.sp
69.BR waitid ():
70_SVID_SOURCE || _XOPEN_SOURCE
fea681da 71.SH DESCRIPTION
f2351505
MK
72All of these system calls are used to wait for state changes
73in a child of the calling process, and obtain information
74about the child whose state has changed.
75A state change is considered to be: the child terminated;
76the child was stopped by a signal; or the child was resumed by a signal.
77In the case of a terminated child, performing a wait allows
78the system to release the resources associated with the child;
79if a wait is not performed, then terminated the child remains in
80a "zombie" state (see NOTES below).
81
82If a child has already changed state, then these calls return immediately.
83Otherwise they block until either a child changes state or
84a signal handler interrupts the call (assuming that system calls
85are not automatically restarted using the
86.B SA_RESTART
87flag of
88.BR sigaction (2)).
89In the remainder of this page, a child whose state has changed
c13182ef 90and which has not yet been waited upon by one of these system
d3b2ef5d 91calls is termed
f2351505
MK
92.IR waitable .
93.SS "wait() and waitpid()"
fea681da 94The
f2351505
MK
95.BR wait ()
96system call suspends execution of the current process until one of its
97children terminates.
98The call
99.I wait(&status)
100is equivalent to:
101.nf
102
2bc2f479 103 waitpid(\-1, &status, 0);
f2351505 104.fi
fea681da
MK
105
106The
f2351505
MK
107.BR waitpid ()
108system call suspends execution of the current process until a
109child specified by
fea681da 110.I pid
f2351505
MK
111argument has changed state.
112By default,
113.BR waitpid ()
d9bfdb9c 114waits only for terminated children, but this behavior is modifiable
f2351505
MK
115via the
116.I options
117argument, as described below.
fea681da
MK
118
119The value of
120.I pid
f2351505 121can be:
fea681da 122.IP "< \-1"
f2351505 123meaning wait for any child process whose process group ID is
fea681da
MK
124equal to the absolute value of
125.IR pid .
126.IP \-1
f2351505 127meaning wait for any child process.
fea681da 128.IP 0
f2351505 129meaning wait for any child process whose process group ID is
fea681da
MK
130equal to that of the calling process.
131.IP "> 0"
f2351505 132meaning wait for the child whose process ID is equal to the
fea681da
MK
133value of
134.IR pid .
135.PP
136The value of
137.I options
138is an OR of zero or more of the following constants:
139.TP
140.B WNOHANG
f2351505 141return immediately if no child has exited.
fea681da
MK
142.TP
143.B WUNTRACED
d3b2ef5d 144also return if a child has stopped
f2351505 145(but not traced via
d3b2ef5d
MK
146.BR ptrace (2)).
147Status for
148.I traced
149children which have stopped is provided
150even if this option is not specified.
f2351505
MK
151.TP
152.B WCONTINUED
153(Since Linux 2.6.10)
d3b2ef5d 154also return if a stopped child has been resumed by delivery of
f2351505 155.BR SIGCONT .
fea681da
MK
156.PP
157(For Linux-only options, see below.)
158.PP
c13182ef 159The
f2351505
MK
160.B WUNTRACED
161and
162.B WCONTINUED
163options are only effective if the
164.B SA_NOCLDSTOP
165flag has not been set for the
166.B SIGCHLD
167signal (see
168.BR sigaction (2)).
169.PP
fea681da
MK
170If
171.I status
8478ee02 172is not NULL,
f2351505
MK
173.BR wait ()
174and
175.BR waitpid ()
a8d55537 176store status information in the \fIint\fP to which it points.
f2351505
MK
177This integer can be inspected with the following macros (which
178take the integer itself as an argument, not a pointer to it,
179as is done in
180.BR wait ()
181and
182.BR waitpid ()!):
fea681da
MK
183.TP
184.BI WIFEXITED( status )
185returns true if the child terminated normally, that is,
f2351505
MK
186by calling
187.BR exit (3)
188or
a5e0a0e4 189.BR _exit (2),
f2351505 190or by returning from main().
fea681da
MK
191.TP
192.BI WEXITSTATUS( status )
f2351505
MK
193returns the exit status of the child.
194This consists of the least significant 8 bits of the
195.I status
196argument that the child specified in a call to
0bfa087b 197.BR exit (3)
f2351505 198or
0bfa087b 199.BR _exit (2)
f2351505
MK
200or as the argument for a return statement in main().
201This macro should only be employed if
fea681da
MK
202.B WIFEXITED
203returned true.
204.TP
205.BI WIFSIGNALED( status )
f2351505 206returns true if the child process was terminated by a signal.
fea681da
MK
207.TP
208.BI WTERMSIG( status )
209returns the number of the signal that caused the child process to
c13182ef
MK
210terminate.
211This macro should only be employed if
f2351505
MK
212.B WIFSIGNALED
213returned true.
214.TP
215.BI WCOREDUMP( status )
216returns true if the child produced a core dump.
217This macro should only be employed if
fea681da 218.B WIFSIGNALED
f2351505
MK
219returned true.
220This macro is not specified in POSIX.1-2001 and is not available on
221some Unix implementations (e.g., AIX, SunOS).
222Only use this enclosed in #ifdef WCOREDUMP ... #endif.
fea681da
MK
223.TP
224.BI WIFSTOPPED( status )
f2351505
MK
225returns true if the child process was stopped by delivery of a signal;
226this is only possible if the call was done using
0daa9e92 227.B WUNTRACED
fea681da
MK
228or when the child is being traced (see
229.BR ptrace (2)).
230.TP
231.BI WSTOPSIG( status )
c13182ef
MK
232returns the number of the signal which caused the child to stop.
233This macro should only be employed if
fea681da 234.B WIFSTOPPED
f2351505
MK
235returned true.
236.TP
237.BI WIFCONTINUED( status )
238(Since Linux 2.6.10)
f2351505
MK
239returns true if the child process was resumed by delivery of
240.BR SIGCONT .
241.SS "waitid()"
242The
243.BR waitid ()
244system call (available since Linux 2.6.9) provides more precise
245control over which child state changes to wait for.
246
247The
248.I idtype
249and
250.I id
251arguments select the child(ren) to wait for, as follows:
252.IP "\fIidtype\fP == \fBP_PID\fP"
253Wait for the child whose process ID matches
254.IR id .
255.IP "\fIidtype\fP == \fBP_PGID\fP"
256Wait for any child whose process group ID matches
257.IR id .
258.IP "\fIidtype\fP == \fBP_ALL\fP"
259Wait for any child;
260.I id
261is ignored.
262.PP
263The child state changes to wait for are specified by ORing
264one or more of the following flags in
265.IR options :
266.TP
267.B WEXITED
268Wait for children that have terminated.
269.TP
270.B WSTOPPED
271Wait for children that have been stopped by delivery of a signal.
272.TP
273.B WCONTINUED
274Wait for (previously stopped) children that have been
275resumed by delivery of
276.BR SIGCONT .
277.PP
278The following flags may additionally be ORed in
279.IR options :
280.TP
281.B WNOHANG
282As for
283.BR waitpid ().
284.TP
285.B WNOWAIT
286Leave the child in a waitable state; a later wait call
287can be used to again retrieve the child status information.
288.PP
289Upon successful return,
290.BR waitid ()
291fills in the following fields of the
292.I siginfo_t
293structure pointed to by
294.IR infop :
295.IP \fIsi_pid\fP
296The process ID of the child.
297.IP \fIsi_uid\fP
298The real user ID of the child.
04d6ea6b 299(This field is not set on most other implementations.)
f2351505
MK
300.IP \fIsi_signo\fP
301Always set to
302.BR SIGCHLD .
303.IP \fIsi_status\fP
304Either the exit status of the child, as given to
305.BR _exit (2)
306(or
307.BR exit (3)),
308or the signal that caused the child to terminate, stop, or continue.
c13182ef 309The
f2351505
MK
310.I si_code
311field can be used to determine how to interpret this field.
312.IP \fIsi_code\fP
313Set to one of:
314.B CLD_EXITED
315(child called
316.BR _exit (2));
317.B CLD_KILLED
318(child killed by signal);
319.B CLD_STOPPED
320(child stopped by signal); or
321.B CLD_CONTINUED
322(child continued by
323.BR SIGCONT ).
324.PP
325If
326.B WNOHANG
327was specified in
328.I options
329and there were no children in a waitable state, then
330.BR waitid ()
331returns 0 immediately and
332the state of the
333.I siginfo_t
334structure pointed to by
335.I infop
336is unspecified.
c13182ef 337.\" POSIX.1-2001 leaves this possibility unspecified; most
f2351505
MK
338.\" implementations (including Linux) zero out the structure
339.\" in this case, but at at least one implementation (AIX 5.1)
340.\" does not -- MTK Nov 04
341To distinguish this case from that where a child was in a
342waitable state, zero out the
343.I si_pid
344field before the call and check for a non-zero value in this field
345after the call returns.
fea681da 346.SH "RETURN VALUE"
f2351505 347.BR wait ():
d3b2ef5d 348on success, returns the process ID of the terminated child;
f2351505
MK
349on error, \-1 is returned.
350
a5e0a0e4 351.BR waitpid ():
d3b2ef5d 352on success, returns the process ID of the child whose state has changed;
f2351505
MK
353on error, \-1 is returned;
354if
fea681da 355.B WNOHANG
f2351505
MK
356was specified and no child(ren) specified by
357.I pid
358has yet changed state, then 0 is returned.
359
a5e0a0e4 360.BR waitid ():
c13182ef 361returns 0 on success or
f2351505
MK
362if
363.B WNOHANG
364was specified and no child(ren) specified by
365.I id
366has yet changed state;
367on error, \-1 is returned.
368
369Each of these calls sets
fea681da 370.I errno
f2351505 371to an appropriate value in the case of an error.
fea681da
MK
372.SH ERRORS
373.TP
0daa9e92 374.B ECHILD
c13182ef 375(for
e1d6264d 376.BR wait ())
fea681da
MK
377The calling process does not have any unwaited-for children.
378.TP
0daa9e92 379.B ECHILD
c13182ef
MK
380(for
381.BR waitpid ()
382or
e1d6264d 383.BR waitid ())
f2351505 384The process specified by
fea681da 385.I pid
f2351505
MK
386.RB ( waitpid ())
387or
388.I idtype
389and
390.I id
391.RB ( waitid ())
fea681da 392does not exist or is not a child of the calling process.
8bd58774
MK
393(This can happen for one's own child if the action for
394.B SIGCHLD
395is set to
396.BR SIG_IGN .
4fb31341 397See also the \fILinux Notes\fP section about threads.)
fea681da
MK
398.TP
399.B EINTR
400.B WNOHANG
401was not set and an unblocked signal or a
402.B SIGCHLD
403was caught.
404.TP
405.B EINVAL
406The
407.I options
408argument was invalid.
2dd578fd
MK
409.SH "CONFORMING TO"
410SVr4, 4.3BSD, POSIX.1-2001.
fea681da 411.SH NOTES
f2351505
MK
412A child that terminates, but has not been waited for becomes a "zombie".
413The kernel maintains a minimal set of information about the zombie
414process (PID, termination status, resource usage information)
415in order to allow the parent to later perform a wait to obtain
416information about the child.
417As long as a zombie is not removed from the system via a wait,
418it will consume a slot in the kernel process table, and if
419this table fills, it will not be possible to create further processes.
420If a parent process terminates, then its "zombie" children (if any)
421are adopted by
422.BR init (8),
423which automatically performs a wait to remove the zombies.
424
425POSIX.1-2001 specifies that if the disposition of
426.B SIGCHLD
c13182ef 427is set to
f2351505 428.B SIG_IGN
c13182ef 429or the
f2351505
MK
430.B SA_NOCLDWAIT
431flag is set for
0daa9e92 432.B SIGCHLD
c13182ef 433(see
f2351505
MK
434.BR sigaction (2)),
435then children that terminate do not become zombies and a call to
fea681da
MK
436.BR wait ()
437or
438.BR waitpid ()
f2351505 439will block until all children have terminated, and then fail with
fea681da 440.I errno
f2351505
MK
441set to
442.BR ECHILD .
d9bfdb9c 443(The original POSIX standard left the behavior of setting
f2351505
MK
444.B SIGCHLD
445to
446.B SIG_IGN
447unspecified.)
448Linux 2.6 conforms to this specification.
449However, Linux 2.4 (and earlier) does not:
fea681da 450if a
c13182ef
MK
451.BR wait ()
452or
e1d6264d 453.BR waitpid ()
f2351505
MK
454call is made while
455.B SIGCHLD
456is being ignored, the call behaves just as though
457.B SIGCHLD
704a18f0 458were not being ignored, that is, the call blocks until the next child
d3b2ef5d 459terminates and then returns the process ID and status of that child.
4fb31341 460.SS Linux Notes
fea681da 461In the Linux kernel, a kernel-scheduled thread is not a distinct
c13182ef
MK
462construct from a process.
463Instead, a thread is simply a process
fea681da
MK
464that is created using the Linux-unique
465.BR clone (2)
466system call; other routines such as the portable
467.BR pthread_create (3)
468call are implemented using
469.BR clone (2).
470Before Linux 2.4, a thread was just a special case of a process,
471and as a consequence one thread could not wait on the children
472of another thread, even when the latter belongs to the same thread group.
473However, POSIX prescribes such functionality, and since Linux 2.4
474a thread can, and by default will, wait on children of other threads
475in the same thread group.
476.LP
75b48e9d 477The following Linux specific
fea681da
MK
478.I options
479are for use with children created using
948fb4ed
MK
480.BR clone (2);
481they cannot be used with
482.BR waitid ():
fea681da
MK
483.TP
484.B __WCLONE
485.\" since 0.99pl10
c13182ef
MK
486Wait for "clone" children only.
487If omitted then wait for "non-clone" children only.
488(A "clone" child is one which delivers no signal, or a signal other than
fea681da
MK
489.B SIGCHLD
490to its parent upon termination.)
491This option is ignored if
492.B __WALL
493is also specified.
494.TP
495.B __WALL
496.\" since patch-2.3.48
497(Since Linux 2.4) Wait for all children, regardless of
498type ("clone" or "non-clone").
499.TP
500.B __WNOTHREAD
501.\" since patch-2.4.0-test8
502(Since Linux 2.4) Do not wait for children of other threads in
c13182ef
MK
503the same thread group.
504This was the default before Linux 2.4.
1fa343d1 505.SH EXAMPLE
cde9f44b 506.\" fork.2 refers to this example program.
c13182ef 507The following program demonstrates the use of
19dbfd0a 508.BR fork (2)
c13182ef 509and
1fa343d1
MK
510.BR waitpid (2).
511The program creates a child process.
c13182ef
MK
512If no command-line argument is supplied to the program,
513then the child suspends its execution using
1fa343d1
MK
514.BR pause (2),
515to allow the user to send signals to the child.
516Otherwise, if a command-line argument is supplied,
c13182ef 517then the child exits immediately,
1fa343d1
MK
518using the integer supplied on the command line as the exit status.
519The parent process executes a loop that monitors the child using
520.BR waitpid (2),
d9bfdb9c 521and uses the W*() macros described above to analyze the wait status value.
1fa343d1
MK
522
523The following shell session demonstrates the use of the program:
524.nf
525
526$ ./a.out &
527Child PID is 32360
528[1] 32359
29059a65 529$ kill \-STOP 32360
1fa343d1 530stopped by signal 19
29059a65 531$ kill \-CONT 32360
1fa343d1 532continued
29059a65 533$ kill \-TERM 32360
1fa343d1
MK
534killed by signal 15
535[1]+ Done ./a.out
536$
537
1fa343d1
MK
538#include <sys/wait.h>
539#include <stdlib.h>
540#include <unistd.h>
541#include <stdio.h>
542
543int
544main(int argc, char *argv[])
545{
546 pid_t cpid, w;
547 int status;
548
549 cpid = fork();
29059a65 550 if (cpid == \-1) {
45949175
MK
551 perror("fork");
552 exit(EXIT_FAILURE);
553 }
1fa343d1
MK
554
555 if (cpid == 0) { /* Code executed by child */
556 printf("Child PID is %ld\\n", (long) getpid());
557 if (argc == 1)
558 pause(); /* Wait for signals */
559 _exit(atoi(argv[1]));
560
561 } else { /* Code executed by parent */
562 do {
563 w = waitpid(cpid, &status, WUNTRACED | WCONTINUED);
29059a65 564 if (w == \-1) {
45949175
MK
565 perror("waitpid");
566 exit(EXIT_FAILURE);
567 }
1fa343d1
MK
568
569 if (WIFEXITED(status)) {
570 printf("exited, status=%d\\n", WEXITSTATUS(status));
571 } else if (WIFSIGNALED(status)) {
572 printf("killed by signal %d\\n", WTERMSIG(status));
573 } else if (WIFSTOPPED(status)) {
574 printf("stopped by signal %d\\n", WSTOPSIG(status));
575 } else if (WIFCONTINUED(status)) {
576 printf("continued\\n");
577 }
578 } while (!WIFEXITED(status) && !WIFSIGNALED(status));
579 exit(EXIT_SUCCESS);
580 }
581}
1fa343d1 582.fi
fea681da 583.SH "SEE ALSO"
f2351505 584.BR _exit (2),
fea681da 585.BR clone (2),
f2351505
MK
586.BR fork (2),
587.BR kill (2),
fea681da 588.BR ptrace (2),
f2351505 589.BR sigaction (2),
fea681da
MK
590.BR signal (2),
591.BR wait4 (2),
592.BR pthread_create (3),
53a1443c 593.BR credentials (7),
fea681da 594.BR signal (7)