(linenum→info "unix/slp.c:2238")

glibc/2.7/manual/process.texi

    1: @node Processes, Job Control, Program Basics, Top
    2: @c %MENU% How to create processes and run other programs
    3: @chapter Processes
    4: 
    5: @cindex process
    6: @dfn{Processes} are the primitive units for allocation of system
    7: resources.  Each process has its own address space and (usually) one
    8: thread of control.  A process executes a program; you can have multiple
    9: processes executing the same program, but each process has its own copy
   10: of the program within its own address space and executes it
   11: independently of the other copies.
   12: 
   13: @cindex child process
   14: @cindex parent process
   15: Processes are organized hierarchically.  Each process has a @dfn{parent
   16: process} which explicitly arranged to create it.  The processes created
   17: by a given parent are called its @dfn{child processes}.  A child
   18: inherits many of its attributes from the parent process.
   19: 
   20: This chapter describes how a program can create, terminate, and control
   21: child processes.  Actually, there are three distinct operations
   22: involved: creating a new child process, causing the new process to
   23: execute a program, and coordinating the completion of the child process
   24: with the original program.
   25: 
   26: The @code{system} function provides a simple, portable mechanism for
   27: running another program; it does all three steps automatically.  If you
   28: need more control over the details of how this is done, you can use the
   29: primitive functions to do each step individually instead.
   30: 
   31: @menu
   32: * Running a Command::           The easy way to run another program.
   33: * Process Creation Concepts::   An overview of the hard way to do it.
   34: * Process Identification::      How to get the process ID of a process.
   35: * Creating a Process::          How to fork a child process.
   36: * Executing a File::            How to make a process execute another program.
   37: * Process Completion::          How to tell when a child process has completed.
   38: * Process Completion Status::   How to interpret the status value
   39:                                  returned from a child process.
   40: * BSD Wait Functions::          More functions, for backward compatibility.
   41: * Process Creation Example::    A complete example program.
   42: @end menu
   43: 
   44: 
   45: @node Running a Command
   46: @section Running a Command
   47: @cindex running a command
   48: 
   49: The easy way to run another program is to use the @code{system}
   50: function.  This function does all the work of running a subprogram, but
   51: it doesn't give you much control over the details: you have to wait
   52: until the subprogram terminates before you can do anything else.
   53: 
   54: @comment stdlib.h
   55: @comment ISO
   56: @deftypefun int system (const char *@var{command})
   57: @pindex sh
   58: This function executes @var{command} as a shell command.  In the GNU C
   59: library, it always uses the default shell @code{sh} to run the command.
   60: In particular, it searches the directories in @code{PATH} to find
   61: programs to execute.  The return value is @code{-1} if it wasn't
   62: possible to create the shell process, and otherwise is the status of the
   63: shell process.  @xref{Process Completion}, for details on how this
   64: status code can be interpreted.
   65: 
   66: If the @var{command} argument is a null pointer, a return value of zero
   67: indicates that no command processor is available.
   68: 
   69: This function is a cancellation point in multi-threaded programs.  This
   70: is a problem if the thread allocates some resources (like memory, file
   71: descriptors, semaphores or whatever) at the time @code{system} is
   72: called.  If the thread gets canceled these resources stay allocated
   73: until the program ends.  To avoid this calls to @code{system} should be
   74: protected using cancellation handlers.
   75: @c ref pthread_cleanup_push / pthread_cleanup_pop
   76: 
   77: @pindex stdlib.h
   78: The @code{system} function is declared in the header file
   79: @file{stdlib.h}.
   80: @end deftypefun
   81: 
   82: @strong{Portability Note:} Some C implementations may not have any
   83: notion of a command processor that can execute other programs.  You can
   84: determine whether a command processor exists by executing
   85: @w{@code{system (NULL)}}; if the return value is nonzero, a command
   86: processor is available.
   87: 
   88: The @code{popen} and @code{pclose} functions (@pxref{Pipe to a
   89: Subprocess}) are closely related to the @code{system} function.  They
   90: allow the parent process to communicate with the standard input and
   91: output channels of the command being executed.
   92: 
   93: @node Process Creation Concepts
   94: @section Process Creation Concepts
   95: 
   96: This section gives an overview of processes and of the steps involved in
   97: creating a process and making it run another program.
   98: 
   99: @cindex process ID
  100: @cindex process lifetime
  101: Each process is named by a @dfn{process ID} number.  A unique process ID
  102: is allocated to each process when it is created.  The @dfn{lifetime} of
  103: a process ends when its termination is reported to its parent process;
  104: at that time, all of the process resources, including its process ID,
  105: are freed.
  106: 
  107: @cindex creating a process
  108: @cindex forking a process
  109: @cindex child process
  110: @cindex parent process
  111: Processes are created with the @code{fork} system call (so the operation
  112: of creating a new process is sometimes called @dfn{forking} a process).
  113: The @dfn{child process} created by @code{fork} is a copy of the original
  114: @dfn{parent process}, except that it has its own process ID.
  115: 
  116: After forking a child process, both the parent and child processes
  117: continue to execute normally.  If you want your program to wait for a
  118: child process to finish executing before continuing, you must do this
  119: explicitly after the fork operation, by calling @code{wait} or
  120: @code{waitpid} (@pxref{Process Completion}).  These functions give you
  121: limited information about why the child terminated---for example, its
  122: exit status code.
  123: 
  124: A newly forked child process continues to execute the same program as
  125: its parent process, at the point where the @code{fork} call returns.
  126: You can use the return value from @code{fork} to tell whether the program
  127: is running in the parent process or the child.
  128: 
  129: @cindex process image
  130: Having several processes run the same program is only occasionally
  131: useful.  But the child can execute another program using one of the
  132: @code{exec} functions; see @ref{Executing a File}.  The program that the
  133: process is executing is called its @dfn{process image}.  Starting
  134: execution of a new program causes the process to forget all about its
  135: previous process image; when the new program exits, the process exits
  136: too, instead of returning to the previous process image.
  137: 
  138: @node Process Identification
  139: @section Process Identification
  140: 
  141: The @code{pid_t} data type represents process IDs.  You can get the
  142: process ID of a process by calling @code{getpid}.  The function
  143: @code{getppid} returns the process ID of the parent of the current
  144: process (this is also known as the @dfn{parent process ID}).  Your
  145: program should include the header files @file{unistd.h} and
  146: @file{sys/types.h} to use these functions.
  147: @pindex sys/types.h
  148: @pindex unistd.h
  149: 
  150: @comment sys/types.h
  151: @comment POSIX.1
  152: @deftp {Data Type} pid_t
  153: The @code{pid_t} data type is a signed integer type which is capable
  154: of representing a process ID.  In the GNU library, this is an @code{int}.
  155: @end deftp
  156: 
  157: @comment unistd.h
  158: @comment POSIX.1
  159: @deftypefun pid_t getpid (void)
  160: The @code{getpid} function returns the process ID of the current process.
  161: @end deftypefun
  162: 
  163: @comment unistd.h
  164: @comment POSIX.1
  165: @deftypefun pid_t getppid (void)
  166: The @code{getppid} function returns the process ID of the parent of the
  167: current process.
  168: @end deftypefun
  169: 
  170: @node Creating a Process
  171: @section Creating a Process
  172: 
  173: The @code{fork} function is the primitive for creating a process.
  174: It is declared in the header file @file{unistd.h}.
  175: @pindex unistd.h
  176: 
  177: @comment unistd.h
  178: @comment POSIX.1
  179: @deftypefun pid_t fork (void)
  180: The @code{fork} function creates a new process.
  181: 
  182: If the operation is successful, there are then both parent and child
  183: processes and both see @code{fork} return, but with different values: it
  184: returns a value of @code{0} in the child process and returns the child's
  185: process ID in the parent process.
  186: 
  187: If process creation failed, @code{fork} returns a value of @code{-1} in
  188: the parent process.  The following @code{errno} error conditions are
  189: defined for @code{fork}:
  190: 
  191: @table @code
  192: @item EAGAIN
  193: There aren't enough system resources to create another process, or the
  194: user already has too many processes running.  This means exceeding the
  195: @code{RLIMIT_NPROC} resource limit, which can usually be increased;
  196: @pxref{Limits on Resources}.
  197: 
  198: @item ENOMEM
  199: The process requires more space than the system can supply.
  200: @end table
  201: @end deftypefun
  202: 
  203: The specific attributes of the child process that differ from the
  204: parent process are:
  205: 
  206: @itemize @bullet
  207: @item
  208: The child process has its own unique process ID.
  209: 
  210: @item
  211: The parent process ID of the child process is the process ID of its
  212: parent process.
  213: 
  214: @item
  215: The child process gets its own copies of the parent process's open file
  216: descriptors.  Subsequently changing attributes of the file descriptors
  217: in the parent process won't affect the file descriptors in the child,
  218: and vice versa.  @xref{Control Operations}.  However, the file position
  219: associated with each descriptor is shared by both processes;
  220: @pxref{File Position}.
  221: 
  222: @item
  223: The elapsed processor times for the child process are set to zero;
  224: see @ref{Processor Time}.
  225: 
  226: @item
  227: The child doesn't inherit file locks set by the parent process.
  228: @c !!! flock locks shared
  229: @xref{Control Operations}.
  230: 
  231: @item
  232: The child doesn't inherit alarms set by the parent process.
  233: @xref{Setting an Alarm}.
  234: 
  235: @item
  236: The set of pending signals (@pxref{Delivery of Signal}) for the child
  237: process is cleared.  (The child process inherits its mask of blocked
  238: signals and signal actions from the parent process.)
  239: @end itemize
  240: 
  241: 
  242: @comment unistd.h
  243: @comment BSD
  244: @deftypefun pid_t vfork (void)
  245: The @code{vfork} function is similar to @code{fork} but on some systems
  246: it is more efficient; however, there are restrictions you must follow to
  247: use it safely.
  248: 
  249: While @code{fork} makes a complete copy of the calling process's address
  250: space and allows both the parent and child to execute independently,
  251: @code{vfork} does not make this copy.  Instead, the child process
  252: created with @code{vfork} shares its parent's address space until it
  253: calls @code{_exit} or one of the @code{exec} functions.  In the
  254: meantime, the parent process suspends execution.
  255: 
  256: You must be very careful not to allow the child process created with
  257: @code{vfork} to modify any global data or even local variables shared
  258: with the parent.  Furthermore, the child process cannot return from (or
  259: do a long jump out of) the function that called @code{vfork}!  This
  260: would leave the parent process's control information very confused.  If
  261: in doubt, use @code{fork} instead.
  262: 
  263: Some operating systems don't really implement @code{vfork}.  The GNU C
  264: library permits you to use @code{vfork} on all systems, but actually
  265: executes @code{fork} if @code{vfork} isn't available.  If you follow
  266: the proper precautions for using @code{vfork}, your program will still
  267: work even if the system uses @code{fork} instead.
  268: @end deftypefun
  269: 
  270: @node Executing a File
  271: @section Executing a File
  272: @cindex executing a file
  273: @cindex @code{exec} functions
  274: 
  275: This section describes the @code{exec} family of functions, for executing
  276: a file as a process image.  You can use these functions to make a child
  277: process execute a new program after it has been forked.
  278: 
  279: To see the effects of @code{exec} from the point of view of the called
  280: program, @xref{Program Basics}.
  281: 
  282: @pindex unistd.h
  283: The functions in this family differ in how you specify the arguments,
  284: but otherwise they all do the same thing.  They are declared in the
  285: header file @file{unistd.h}.
  286: 
  287: @comment unistd.h
  288: @comment POSIX.1
  289: @deftypefun int execv (const char *@var{filename}, char *const @var{argv}@t{[]})
  290: The @code{execv} function executes the file named by @var{filename} as a
  291: new process image.
  292: 
  293: The @var{argv} argument is an array of null-terminated strings that is
  294: used to provide a value for the @code{argv} argument to the @code{main}
  295: function of the program to be executed.  The last element of this array
  296: must be a null pointer.  By convention, the first element of this array
  297: is the file name of the program sans directory names.  @xref{Program
  298: Arguments}, for full details on how programs can access these arguments.
  299: 
  300: The environment for the new process image is taken from the
  301: @code{environ} variable of the current process image; see
  302: @ref{Environment Variables}, for information about environments.
  303: @end deftypefun
  304: 
  305: @comment unistd.h
  306: @comment POSIX.1
  307: @deftypefun int execl (const char *@var{filename}, const char *@var{arg0}, @dots{})
  308: This is similar to @code{execv}, but the @var{argv} strings are
  309: specified individually instead of as an array.  A null pointer must be
  310: passed as the last such argument.
  311: @end deftypefun
  312: 
  313: @comment unistd.h
  314: @comment POSIX.1
  315: @deftypefun int execve (const char *@var{filename}, char *const @var{argv}@t{[]}, char *const @var{env}@t{[]})
  316: This is similar to @code{execv}, but permits you to specify the environment
  317: for the new program explicitly as the @var{env} argument.  This should
  318: be an array of strings in the same format as for the @code{environ}
  319: variable; see @ref{Environment Access}.
  320: @end deftypefun
  321: 
  322: @comment unistd.h
  323: @comment POSIX.1
  324: @deftypefun int execle (const char *@var{filename}, const char *@var{arg0}, char *const @var{env}@t{[]}, @dots{})
  325: This is similar to @code{execl}, but permits you to specify the
  326: environment for the new program explicitly.  The environment argument is
  327: passed following the null pointer that marks the last @var{argv}
  328: argument, and should be an array of strings in the same format as for
  329: the @code{environ} variable.
  330: @end deftypefun
  331: 
  332: @comment unistd.h
  333: @comment POSIX.1
  334: @deftypefun int execvp (const char *@var{filename}, char *const @var{argv}@t{[]})
  335: The @code{execvp} function is similar to @code{execv}, except that it
  336: searches the directories listed in the @code{PATH} environment variable
  337: (@pxref{Standard Environment}) to find the full file name of a
  338: file from @var{filename} if @var{filename} does not contain a slash.
  339: 
  340: This function is useful for executing system utility programs, because
  341: it looks for them in the places that the user has chosen.  Shells use it
  342: to run the commands that users type.
  343: @end deftypefun
  344: 
  345: @comment unistd.h
  346: @comment POSIX.1
  347: @deftypefun int execlp (const char *@var{filename}, const char *@var{arg0}, @dots{})
  348: This function is like @code{execl}, except that it performs the same
  349: file name searching as the @code{execvp} function.
  350: @end deftypefun
  351: 
  352: The size of the argument list and environment list taken together must
  353: not be greater than @code{ARG_MAX} bytes.  @xref{General Limits}.  In
  354: the GNU system, the size (which compares against @code{ARG_MAX})
  355: includes, for each string, the number of characters in the string, plus
  356: the size of a @code{char *}, plus one, rounded up to a multiple of the
  357: size of a @code{char *}.  Other systems may have somewhat different
  358: rules for counting.
  359: 
  360: These functions normally don't return, since execution of a new program
  361: causes the currently executing program to go away completely.  A value
  362: of @code{-1} is returned in the event of a failure.  In addition to the
  363: usual file name errors (@pxref{File Name Errors}), the following
  364: @code{errno} error conditions are defined for these functions:
  365: 
  366: @table @code
  367: @item E2BIG
  368: The combined size of the new program's argument list and environment
  369: list is larger than @code{ARG_MAX} bytes.  The GNU system has no
  370: specific limit on the argument list size, so this error code cannot
  371: result, but you may get @code{ENOMEM} instead if the arguments are too
  372: big for available memory.
  373: 
  374: @item ENOEXEC
  375: The specified file can't be executed because it isn't in the right format.
  376: 
  377: @item ENOMEM
  378: Executing the specified file requires more storage than is available.
  379: @end table
  380: 
  381: If execution of the new file succeeds, it updates the access time field
  382: of the file as if the file had been read.  @xref{File Times}, for more
  383: details about access times of files.
  384: 
  385: The point at which the file is closed again is not specified, but
  386: is at some point before the process exits or before another process
  387: image is executed.
  388: 
  389: Executing a new process image completely changes the contents of memory,
  390: copying only the argument and environment strings to new locations.  But
  391: many other attributes of the process are unchanged:
  392: 
  393: @itemize @bullet
  394: @item
  395: The process ID and the parent process ID.  @xref{Process Creation Concepts}.
  396: 
  397: @item
  398: Session and process group membership.  @xref{Concepts of Job Control}.
  399: 
  400: @item
  401: Real user ID and group ID, and supplementary group IDs.  @xref{Process
  402: Persona}.
  403: 
  404: @item
  405: Pending alarms.  @xref{Setting an Alarm}.
  406: 
  407: @item
  408: Current working directory and root directory.  @xref{Working
  409: Directory}.  In the GNU system, the root directory is not copied when
  410: executing a setuid program; instead the system default root directory
  411: is used for the new program.
  412: 
  413: @item
  414: File mode creation mask.  @xref{Setting Permissions}.
  415: 
  416: @item
  417: Process signal mask; see @ref{Process Signal Mask}.
  418: 
  419: @item
  420: Pending signals; see @ref{Blocking Signals}.
  421: 
  422: @item
  423: Elapsed processor time associated with the process; see @ref{Processor Time}.
  424: @end itemize
  425: 
  426: If the set-user-ID and set-group-ID mode bits of the process image file
  427: are set, this affects the effective user ID and effective group ID
  428: (respectively) of the process.  These concepts are discussed in detail
  429: in @ref{Process Persona}.
  430: 
  431: Signals that are set to be ignored in the existing process image are
  432: also set to be ignored in the new process image.  All other signals are
  433: set to the default action in the new process image.  For more
  434: information about signals, see @ref{Signal Handling}.
  435: 
  436: File descriptors open in the existing process image remain open in the
  437: new process image, unless they have the @code{FD_CLOEXEC}
  438: (close-on-exec) flag set.  The files that remain open inherit all
  439: attributes of the open file description from the existing process image,
  440: including file locks.  File descriptors are discussed in @ref{Low-Level I/O}.
  441: 
  442: Streams, by contrast, cannot survive through @code{exec} functions,
  443: because they are located in the memory of the process itself.  The new
  444: process image has no streams except those it creates afresh.  Each of
  445: the streams in the pre-@code{exec} process image has a descriptor inside
  446: it, and these descriptors do survive through @code{exec} (provided that
  447: they do not have @code{FD_CLOEXEC} set).  The new process image can
  448: reconnect these to new streams using @code{fdopen} (@pxref{Descriptors
  449: and Streams}).
  450: 
  451: @node Process Completion
  452: @section Process Completion
  453: @cindex process completion
  454: @cindex waiting for completion of child process
  455: @cindex testing exit status of child process
  456: 
  457: The functions described in this section are used to wait for a child
  458: process to terminate or stop, and determine its status.  These functions
  459: are declared in the header file @file{sys/wait.h}.
  460: @pindex sys/wait.h
  461: 
  462: @comment sys/wait.h
  463: @comment POSIX.1
  464: @deftypefun pid_t waitpid (pid_t @var{pid}, int *@var{status-ptr}, int @var{options})
  465: The @code{waitpid} function is used to request status information from a
  466: child process whose process ID is @var{pid}.  Normally, the calling
  467: process is suspended until the child process makes status information
  468: available by terminating.
  469: 
  470: Other values for the @var{pid} argument have special interpretations.  A
  471: value of @code{-1} or @code{WAIT_ANY} requests status information for
  472: any child process; a value of @code{0} or @code{WAIT_MYPGRP} requests
  473: information for any child process in the same process group as the
  474: calling process; and any other negative value @minus{} @var{pgid}
  475: requests information for any child process whose process group ID is
  476: @var{pgid}.
  477: 
  478: If status information for a child process is available immediately, this
  479: function returns immediately without waiting.  If more than one eligible
  480: child process has status information available, one of them is chosen
  481: randomly, and its status is returned immediately.  To get the status
  482: from the other eligible child processes, you need to call @code{waitpid}
  483: again.
  484: 
  485: The @var{options} argument is a bit mask.  Its value should be the
  486: bitwise OR (that is, the @samp{|} operator) of zero or more of the
  487: @code{WNOHANG} and @code{WUNTRACED} flags.  You can use the
  488: @code{WNOHANG} flag to indicate that the parent process shouldn't wait;
  489: and the @code{WUNTRACED} flag to request status information from stopped
  490: processes as well as processes that have terminated.
  491: 
  492: The status information from the child process is stored in the object
  493: that @var{status-ptr} points to, unless @var{status-ptr} is a null pointer.
  494: 
  495: This function is a cancellation point in multi-threaded programs.  This
  496: is a problem if the thread allocates some resources (like memory, file
  497: descriptors, semaphores or whatever) at the time @code{waitpid} is
  498: called.  If the thread gets canceled these resources stay allocated
  499: until the program ends.  To avoid this calls to @code{waitpid} should be
  500: protected using cancellation handlers.
  501: @c ref pthread_cleanup_push / pthread_cleanup_pop
  502: 
  503: The return value is normally the process ID of the child process whose
  504: status is reported.  If there are child processes but none of them is
  505: waiting to be noticed, @code{waitpid} will block until one is.  However,
  506: if the @code{WNOHANG} option was specified, @code{waitpid} will return
  507: zero instead of blocking.
  508: 
  509: If a specific PID to wait for was given to @code{waitpid}, it will
  510: ignore all other children (if any).  Therefore if there are children
  511: waiting to be noticed but the child whose PID was specified is not one
  512: of them, @code{waitpid} will block or return zero as described above.
  513: 
  514: A value of @code{-1} is returned in case of error.  The following
  515: @code{errno} error conditions are defined for this function:
  516: 
  517: @table @code
  518: @item EINTR
  519: The function was interrupted by delivery of a signal to the calling
  520: process.  @xref{Interrupted Primitives}.
  521: 
  522: @item ECHILD
  523: There are no child processes to wait for, or the specified @var{pid}
  524: is not a child of the calling process.
  525: 
  526: @item EINVAL
  527: An invalid value was provided for the @var{options} argument.
  528: @end table
  529: @end deftypefun
  530: 
  531: These symbolic constants are defined as values for the @var{pid} argument
  532: to the @code{waitpid} function.
  533: 
  534: @comment Extra blank lines make it look better.
  535: @table @code
  536: @item WAIT_ANY
  537: 
  538: This constant macro (whose value is @code{-1}) specifies that
  539: @code{waitpid} should return status information about any child process.
  540: 
  541: 
  542: @item WAIT_MYPGRP
  543: This constant (with value @code{0}) specifies that @code{waitpid} should
  544: return status information about any child process in the same process
  545: group as the calling process.
  546: @end table
  547: 
  548: These symbolic constants are defined as flags for the @var{options}
  549: argument to the @code{waitpid} function.  You can bitwise-OR the flags
  550: together to obtain a value to use as the argument.
  551: 
  552: @table @code
  553: @item WNOHANG
  554: 
  555: This flag specifies that @code{waitpid} should return immediately
  556: instead of waiting, if there is no child process ready to be noticed.
  557: 
  558: @item WUNTRACED
  559: 
  560: This flag specifies that @code{waitpid} should report the status of any
  561: child processes that have been stopped as well as those that have
  562: terminated.
  563: @end table
  564: 
  565: @comment sys/wait.h
  566: @comment POSIX.1
  567: @deftypefun pid_t wait (int *@var{status-ptr})
  568: This is a simplified version of @code{waitpid}, and is used to wait
  569: until any one child process terminates.  The call:
  570: 
  571: @smallexample
  572: wait (&status)
  573: @end smallexample
  574: 
  575: @noindent
  576: is exactly equivalent to:
  577: 
  578: @smallexample
  579: waitpid (-1, &status, 0)
  580: @end smallexample
  581: 
  582: This function is a cancellation point in multi-threaded programs.  This
  583: is a problem if the thread allocates some resources (like memory, file
  584: descriptors, semaphores or whatever) at the time @code{wait} is
  585: called.  If the thread gets canceled these resources stay allocated
  586: until the program ends.  To avoid this calls to @code{wait} should be
  587: protected using cancellation handlers.
  588: @c ref pthread_cleanup_push / pthread_cleanup_pop
  589: @end deftypefun
  590: 
  591: @comment sys/wait.h
  592: @comment BSD
  593: @deftypefun pid_t wait4 (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}, struct rusage *@var{usage})
  594: If @var{usage} is a null pointer, @code{wait4} is equivalent to
  595: @code{waitpid (@var{pid}, @var{status-ptr}, @var{options})}.
  596: 
  597: If @var{usage} is not null, @code{wait4} stores usage figures for the
  598: child process in @code{*@var{rusage}} (but only if the child has
  599: terminated, not if it has stopped).  @xref{Resource Usage}.
  600: 
  601: This function is a BSD extension.
  602: @end deftypefun
  603: 
  604: Here's an example of how to use @code{waitpid} to get the status from
  605: all child processes that have terminated, without ever waiting.  This
  606: function is designed to be a handler for @code{SIGCHLD}, the signal that
  607: indicates that at least one child process has terminated.
  608: 
  609: @smallexample
  610: @group
  611: void
  612: sigchld_handler (int signum)
  613: @{
  614:   int pid, status, serrno;
  615:   serrno = errno;
  616:   while (1)
  617:     @{
  618:       pid = waitpid (WAIT_ANY, &status, WNOHANG);
  619:       if (pid < 0)
  620:         @{
  621:           perror ("waitpid");
  622:           break;
  623:         @}
  624:       if (pid == 0)
  625:         break;
  626:       notice_termination (pid, status);
  627:     @}
  628:   errno = serrno;
  629: @}
  630: @end group
  631: @end smallexample
  632: 
  633: @node Process Completion Status
  634: @section Process Completion Status
  635: 
  636: If the exit status value (@pxref{Program Termination}) of the child
  637: process is zero, then the status value reported by @code{waitpid} or
  638: @code{wait} is also zero.  You can test for other kinds of information
  639: encoded in the returned status value using the following macros.
  640: These macros are defined in the header file @file{sys/wait.h}.
  641: @pindex sys/wait.h
  642: 
  643: @comment sys/wait.h
  644: @comment POSIX.1
  645: @deftypefn Macro int WIFEXITED (int @var{status})
  646: This macro returns a nonzero value if the child process terminated
  647: normally with @code{exit} or @code{_exit}.
  648: @end deftypefn
  649: 
  650: @comment sys/wait.h
  651: @comment POSIX.1
  652: @deftypefn Macro int WEXITSTATUS (int @var{status})
  653: If @code{WIFEXITED} is true of @var{status}, this macro returns the
  654: low-order 8 bits of the exit status value from the child process.
  655: @xref{Exit Status}.
  656: @end deftypefn
  657: 
  658: @comment sys/wait.h
  659: @comment POSIX.1
  660: @deftypefn Macro int WIFSIGNALED (int @var{status})
  661: This macro returns a nonzero value if the child process terminated
  662: because it received a signal that was not handled.
  663: @xref{Signal Handling}.
  664: @end deftypefn
  665: 
  666: @comment sys/wait.h
  667: @comment POSIX.1
  668: @deftypefn Macro int WTERMSIG (int @var{status})
  669: If @code{WIFSIGNALED} is true of @var{status}, this macro returns the
  670: signal number of the signal that terminated the child process.
  671: @end deftypefn
  672: 
  673: @comment sys/wait.h
  674: @comment BSD
  675: @deftypefn Macro int WCOREDUMP (int @var{status})
  676: This macro returns a nonzero value if the child process terminated
  677: and produced a core dump.
  678: @end deftypefn
  679: 
  680: @comment sys/wait.h
  681: @comment POSIX.1
  682: @deftypefn Macro int WIFSTOPPED (int @var{status})
  683: This macro returns a nonzero value if the child process is stopped.
  684: @end deftypefn
  685: 
  686: @comment sys/wait.h
  687: @comment POSIX.1
  688: @deftypefn Macro int WSTOPSIG (int @var{status})
  689: If @code{WIFSTOPPED} is true of @var{status}, this macro returns the
  690: signal number of the signal that caused the child process to stop.
  691: @end deftypefn
  692: 
  693: 
  694: @node BSD Wait Functions
  695: @section BSD Process Wait Functions
  696: 
  697: The GNU library also provides these related facilities for compatibility
  698: with BSD Unix.  BSD uses the @code{union wait} data type to represent
  699: status values rather than an @code{int}.  The two representations are
  700: actually interchangeable; they describe the same bit patterns.  The GNU
  701: C Library defines macros such as @code{WEXITSTATUS} so that they will
  702: work on either kind of object, and the @code{wait} function is defined
  703: to accept either type of pointer as its @var{status-ptr} argument.
  704: 
  705: These functions are declared in @file{sys/wait.h}.
  706: @pindex sys/wait.h
  707: 
  708: @comment sys/wait.h
  709: @comment BSD
  710: @deftp {Data Type} {union wait}
  711: This data type represents program termination status values.  It has
  712: the following members:
  713: 
  714: @table @code
  715: @item int w_termsig
  716: The value of this member is the same as that of the
  717: @code{WTERMSIG} macro.
  718: 
  719: @item int w_coredump
  720: The value of this member is the same as that of the
  721: @code{WCOREDUMP} macro.
  722: 
  723: @item int w_retcode
  724: The value of this member is the same as that of the
  725: @code{WEXITSTATUS} macro.
  726: 
  727: @item int w_stopsig
  728: The value of this member is the same as that of the
  729: @code{WSTOPSIG} macro.
  730: @end table
  731: 
  732: Instead of accessing these members directly, you should use the
  733: equivalent macros.
  734: @end deftp
  735: 
  736: The @code{wait3} function is the predecessor to @code{wait4}, which is
  737: more flexible.  @code{wait3} is now obsolete.
  738: 
  739: @comment sys/wait.h
  740: @comment BSD
  741: @deftypefun pid_t wait3 (union wait *@var{status-ptr}, int @var{options}, struct rusage *@var{usage})
  742: If @var{usage} is a null pointer, @code{wait3} is equivalent to
  743: @code{waitpid (-1, @var{status-ptr}, @var{options})}.
  744: 
  745: If @var{usage} is not null, @code{wait3} stores usage figures for the
  746: child process in @code{*@var{rusage}} (but only if the child has
  747: terminated, not if it has stopped).  @xref{Resource Usage}.
  748: @end deftypefun
  749: 
  750: @node Process Creation Example
  751: @section Process Creation Example
  752: 
  753: