1@node Processes, Inter-Process Communication, 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 7resources. Each process has its own address space and (usually) one 8thread of control. A process executes a program; you can have multiple 9processes executing the same program, but each process has its own copy 10of the program within its own address space and executes it 11independently of the other copies. 12 13@cindex child process 14@cindex parent process 15Processes are organized hierarchically. Each process has a @dfn{parent 16process} which explicitly arranged to create it. The processes created 17by a given parent are called its @dfn{child processes}. A child 18inherits many of its attributes from the parent process. 19 20This chapter describes how a program can create, terminate, and control 21child processes. Actually, there are three distinct operations 22involved: creating a new child process, causing the new process to 23execute a program, and coordinating the completion of the child process 24with the original program. 25 26The @code{system} function provides a simple, portable mechanism for 27running another program; it does all three steps automatically. If you 28need more control over the details of how this is done, you can use the 29primitive 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 49The easy way to run another program is to use the @code{system} 50function. This function does all the work of running a subprogram, but 51it doesn't give you much control over the details: you have to wait 52until the subprogram terminates before you can do anything else. 53 54@deftypefun int system (const char *@var{command}) 55@standards{ISO, stdlib.h} 56@pindex sh 57@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{} @ascuheap{} @asulock{}}@acunsafe{@aculock{} @acsmem{}}} 58@c system @ascuplugin @ascuheap @asulock @aculock @acsmem 59@c do_system @ascuplugin @ascuheap @asulock @aculock @acsmem 60@c sigemptyset dup ok 61@c libc_lock_lock @asulock @aculock 62@c ADD_REF ok 63@c sigaction dup ok 64@c SUB_REF ok 65@c libc_lock_unlock @aculock 66@c sigaddset dup ok 67@c sigprocmask dup ok 68@c CLEANUP_HANDLER @ascuplugin @ascuheap @acsmem 69@c libc_cleanup_region_start @ascuplugin @ascuheap @acsmem 70@c pthread_cleanup_push_defer @ascuplugin @ascuheap @acsmem 71@c cancel_enabled_and_canceled @ascuplugin @ascuheap @acsmem 72@c do_cancel @ascuplugin @ascuheap @acsmem 73@c cancel_handler ok 74@c kill syscall ok 75@c waitpid dup ok 76@c libc_lock_lock ok 77@c sigaction dup ok 78@c libc_lock_unlock ok 79@c FORK ok 80@c clone syscall ok 81@c waitpid dup ok 82@c CLEANUP_RESET ok 83@c libc_cleanup_region_end ok 84@c pthread_cleanup_pop_restore ok 85@c SINGLE_THREAD_P ok 86@c LIBC_CANCEL_ASYNC @ascuplugin @ascuheap @acsmem 87@c libc_enable_asynccancel @ascuplugin @ascuheap @acsmem 88@c do_cancel dup @ascuplugin @ascuheap @acsmem 89@c LIBC_CANCEL_RESET ok 90@c libc_disable_asynccancel ok 91@c lll_futex_wait dup ok 92This function executes @var{command} as a shell command. In @theglibc{}, 93it always uses the default shell @code{sh} to run the command. 94In particular, it searches the directories in @code{PATH} to find 95programs to execute. The return value is @code{-1} if it wasn't 96possible to create the shell process, and otherwise is the status of the 97shell process. @xref{Process Completion}, for details on how this 98status code can be interpreted. 99 100If the @var{command} argument is a null pointer, a return value of zero 101indicates that no command processor is available. 102 103This function is a cancellation point in multi-threaded programs. This 104is a problem if the thread allocates some resources (like memory, file 105descriptors, semaphores or whatever) at the time @code{system} is 106called. If the thread gets canceled these resources stay allocated 107until the program ends. To avoid this calls to @code{system} should be 108protected using cancellation handlers. 109@c ref pthread_cleanup_push / pthread_cleanup_pop 110 111@pindex stdlib.h 112The @code{system} function is declared in the header file 113@file{stdlib.h}. 114@end deftypefun 115 116@strong{Portability Note:} Some C implementations may not have any 117notion of a command processor that can execute other programs. You can 118determine whether a command processor exists by executing 119@w{@code{system (NULL)}}; if the return value is nonzero, a command 120processor is available. 121 122The @code{popen} and @code{pclose} functions (@pxref{Pipe to a 123Subprocess}) are closely related to the @code{system} function. They 124allow the parent process to communicate with the standard input and 125output channels of the command being executed. 126 127@node Process Creation Concepts 128@section Process Creation Concepts 129 130This section gives an overview of processes and of the steps involved in 131creating a process and making it run another program. 132 133@cindex creating a process 134@cindex forking a process 135@cindex child process 136@cindex parent process 137@cindex subprocess 138A new processes is created when one of the functions 139@code{posix_spawn}, @code{fork}, @code{_Fork} or @code{vfork} is called. 140(The @code{system} and @code{popen} also create new processes internally.) 141Due to the name of the @code{fork} function, the act of creating a new 142process is sometimes called @dfn{forking} a process. Each new process 143(the @dfn{child process} or @dfn{subprocess}) is allocated a process 144ID, distinct from the process ID of the parent process. @xref{Process 145Identification}. 146 147After forking a child process, both the parent and child processes 148continue to execute normally. If you want your program to wait for a 149child process to finish executing before continuing, you must do this 150explicitly after the fork operation, by calling @code{wait} or 151@code{waitpid} (@pxref{Process Completion}). These functions give you 152limited information about why the child terminated---for example, its 153exit status code. 154 155A newly forked child process continues to execute the same program as 156its parent process, at the point where the @code{fork} or @code{_Fork} 157call returns. You can use the return value from @code{fork} or 158@code{_Fork} to tell whether the program is running in the parent process 159or the child. 160 161@cindex process image 162Having several processes run the same program is only occasionally 163useful. But the child can execute another program using one of the 164@code{exec} functions; see @ref{Executing a File}. The program that the 165process is executing is called its @dfn{process image}. Starting 166execution of a new program causes the process to forget all about its 167previous process image; when the new program exits, the process exits 168too, instead of returning to the previous process image. 169 170@node Process Identification 171@section Process Identification 172 173@cindex process ID 174Each process is named by a @dfn{process ID} number, a value of type 175@code{pid_t}. A process ID is allocated to each process when it is 176created. Process IDs are reused over time. The lifetime of a process 177ends when the parent process of the corresponding process waits on the 178process ID after the process has terminated. @xref{Process 179Completion}. (The parent process can arrange for such waiting to 180happen implicitly.) A process ID uniquely identifies a process only 181during the lifetime of the process. As a rule of thumb, this means 182that the process must still be running. 183 184Process IDs can also denote process groups and sessions. 185@xref{Job Control}. 186 187@cindex thread ID 188@cindex task ID 189@cindex thread group 190On Linux, threads created by @code{pthread_create} also receive a 191@dfn{thread ID}. The thread ID of the initial (main) thread is the 192same as the process ID of the entire process. Thread IDs for 193subsequently created threads are distinct. They are allocated from 194the same numbering space as process IDs. Process IDs and thread IDs 195are sometimes also referred to collectively as @dfn{task IDs}. In 196contrast to processes, threads are never waited for explicitly, so a 197thread ID becomes eligible for reuse as soon as a thread exits or is 198canceled. This is true even for joinable threads, not just detached 199threads. Threads are assigned to a @dfn{thread group}. In 200@theglibc{} implementation running on Linux, the process ID is the 201thread group ID of all threads in the process. 202 203You can get the process ID of a process by calling @code{getpid}. The 204function @code{getppid} returns the process ID of the parent of the 205current process (this is also known as the @dfn{parent process ID}). 206Your program should include the header files @file{unistd.h} and 207@file{sys/types.h} to use these functions. 208@pindex sys/types.h 209@pindex unistd.h 210 211@deftp {Data Type} pid_t 212@standards{POSIX.1, sys/types.h} 213The @code{pid_t} data type is a signed integer type which is capable 214of representing a process ID. In @theglibc{}, this is an @code{int}. 215@end deftp 216 217@deftypefun pid_t getpid (void) 218@standards{POSIX.1, unistd.h} 219@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 220The @code{getpid} function returns the process ID of the current process. 221@end deftypefun 222 223@deftypefun pid_t getppid (void) 224@standards{POSIX.1, unistd.h} 225@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 226The @code{getppid} function returns the process ID of the parent of the 227current process. 228@end deftypefun 229 230@deftypefun pid_t gettid (void) 231@standards{Linux, unistd.h} 232@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 233The @code{gettid} function returns the thread ID of the current 234thread. The returned value is obtained from the Linux kernel and is 235not subject to caching. See the discussion of thread IDs above, 236especially regarding reuse of the IDs of threads which have exited. 237 238This function is specific to Linux. 239@end deftypefun 240 241@node Creating a Process 242@section Creating a Process 243 244The @code{fork} function is the primitive for creating a process. 245It is declared in the header file @file{unistd.h}. 246@pindex unistd.h 247 248@deftypefun pid_t fork (void) 249@standards{POSIX.1, unistd.h} 250@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}} 251@c The posix/fork.c implementation iterates over the fork_handlers 252@c using a lock. It then takes the IO_list lock, resets the thread-local 253@c pid, and runs fork. The parent releases the lock, and runs parent 254@c handlers, and unlocks the internal lock. The child bumps the fork 255@c generation, sets the thread-local pid, resets cpu clocks, initializes 256@c the robust mutex list, the stream locks, the IO_list lock, the dynamic 257@c loader lock, runs the child handlers, reseting ref counters to 1, and 258@c initializes the fork lock. These are all safe, unless atfork 259@c handlers themselves are unsafe. 260The @code{fork} function creates a new process. 261 262If the operation is successful, there are then both parent and child 263processes and both see @code{fork} return, but with different values: it 264returns a value of @code{0} in the child process and returns the child's 265process ID in the parent process. 266 267If process creation failed, @code{fork} returns a value of @code{-1} in 268the parent process. The following @code{errno} error conditions are 269defined for @code{fork}: 270 271@table @code 272@item EAGAIN 273There aren't enough system resources to create another process, or the 274user already has too many processes running. This means exceeding the 275@code{RLIMIT_NPROC} resource limit, which can usually be increased; 276@pxref{Limits on Resources}. 277 278@item ENOMEM 279The process requires more space than the system can supply. 280@end table 281@end deftypefun 282 283The specific attributes of the child process that differ from the 284parent process are: 285 286@itemize @bullet 287@item 288The child process has its own unique process ID. 289 290@item 291The parent process ID of the child process is the process ID of its 292parent process. 293 294@item 295The child process gets its own copies of the parent process's open file 296descriptors. Subsequently changing attributes of the file descriptors 297in the parent process won't affect the file descriptors in the child, 298and vice versa. @xref{Control Operations}. However, the file position 299associated with each descriptor is shared by both processes; 300@pxref{File Position}. 301 302@item 303The elapsed processor times for the child process are set to zero; 304see @ref{Processor Time}. 305 306@item 307The child doesn't inherit file locks set by the parent process. 308@c !!! flock locks shared 309@xref{Control Operations}. 310 311@item 312The child doesn't inherit alarms set by the parent process. 313@xref{Setting an Alarm}. 314 315@item 316The set of pending signals (@pxref{Delivery of Signal}) for the child 317process is cleared. (The child process inherits its mask of blocked 318signals and signal actions from the parent process.) 319@end itemize 320 321@deftypefun pid_t _Fork (void) 322@standards{GNU, unistd.h} 323@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 324The @code{_Fork} function is similar to @code{fork}, but it does not invoke 325any callbacks registered with @code{pthread_atfork}, nor does it reset 326any internal state or locks (such as the @code{malloc} locks). In the 327new subprocess, only async-signal-safe functions may be called, such as 328@code{dup2} or @code{execve}. 329 330The @code{_Fork} function is an async-signal-safe replacement of @code{fork}. 331It is a GNU extension. 332 333@end deftypefun 334 335@deftypefun pid_t vfork (void) 336@standards{BSD, unistd.h} 337@safety{@prelim{}@mtsafe{}@asunsafe{@ascuplugin{}}@acunsafe{@aculock{}}} 338@c The vfork implementation proper is a safe syscall, but it may fall 339@c back to fork if the vfork syscall is not available. 340The @code{vfork} function is similar to @code{fork} but on some systems 341it is more efficient; however, there are restrictions you must follow to 342use it safely. 343 344While @code{fork} makes a complete copy of the calling process's address 345space and allows both the parent and child to execute independently, 346@code{vfork} does not make this copy. Instead, the child process 347created with @code{vfork} shares its parent's address space until it 348calls @code{_exit} or one of the @code{exec} functions. In the 349meantime, the parent process suspends execution. 350 351You must be very careful not to allow the child process created with 352@code{vfork} to modify any global data or even local variables shared 353with the parent. Furthermore, the child process cannot return from (or 354do a long jump out of) the function that called @code{vfork}! This 355would leave the parent process's control information very confused. If 356in doubt, use @code{fork} instead. 357 358Some operating systems don't really implement @code{vfork}. @Theglibc{} 359permits you to use @code{vfork} on all systems, but actually 360executes @code{fork} if @code{vfork} isn't available. If you follow 361the proper precautions for using @code{vfork}, your program will still 362work even if the system uses @code{fork} instead. 363@end deftypefun 364 365@node Executing a File 366@section Executing a File 367@cindex executing a file 368@cindex @code{exec} functions 369 370This section describes the @code{exec} family of functions, for executing 371a file as a process image. You can use these functions to make a child 372process execute a new program after it has been forked. 373 374To see the effects of @code{exec} from the point of view of the called 375program, see @ref{Program Basics}. 376 377@pindex unistd.h 378The functions in this family differ in how you specify the arguments, 379but otherwise they all do the same thing. They are declared in the 380header file @file{unistd.h}. 381 382@deftypefun int execv (const char *@var{filename}, char *const @var{argv}@t{[]}) 383@standards{POSIX.1, unistd.h} 384@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 385The @code{execv} function executes the file named by @var{filename} as a 386new process image. 387 388The @var{argv} argument is an array of null-terminated strings that is 389used to provide a value for the @code{argv} argument to the @code{main} 390function of the program to be executed. The last element of this array 391must be a null pointer. By convention, the first element of this array 392is the file name of the program sans directory names. @xref{Program 393Arguments}, for full details on how programs can access these arguments. 394 395The environment for the new process image is taken from the 396@code{environ} variable of the current process image; see 397@ref{Environment Variables}, for information about environments. 398@end deftypefun 399 400@deftypefun int execl (const char *@var{filename}, const char *@var{arg0}, @dots{}) 401@standards{POSIX.1, unistd.h} 402@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} 403This is similar to @code{execv}, but the @var{argv} strings are 404specified individually instead of as an array. A null pointer must be 405passed as the last such argument. 406@end deftypefun 407 408@deftypefun int execve (const char *@var{filename}, char *const @var{argv}@t{[]}, char *const @var{env}@t{[]}) 409@standards{POSIX.1, unistd.h} 410@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 411This is similar to @code{execv}, but permits you to specify the environment 412for the new program explicitly as the @var{env} argument. This should 413be an array of strings in the same format as for the @code{environ} 414variable; see @ref{Environment Access}. 415@end deftypefun 416 417@deftypefun int fexecve (int @var{fd}, char *const @var{argv}@t{[]}, char *const @var{env}@t{[]}) 418@standards{POSIX.1, unistd.h} 419@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 420This is similar to @code{execve}, but instead of identifying the program 421executable by its pathname, the file descriptor @var{fd} is used. The 422descriptor must have been opened with the @code{O_RDONLY} flag or (on 423Linux) the @code{O_PATH} flag. 424 425On Linux, @code{fexecve} can fail with an error of @code{ENOSYS} if 426@file{/proc} has not been mounted and the kernel lacks support for the 427underlying @code{execveat} system call. 428@end deftypefun 429 430@deftypefun int execle (const char *@var{filename}, const char *@var{arg0}, @dots{}, char *const @var{env}@t{[]}) 431@standards{POSIX.1, unistd.h} 432@safety{@prelim{}@mtsafe{}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} 433This is similar to @code{execl}, but permits you to specify the 434environment for the new program explicitly. The environment argument is 435passed following the null pointer that marks the last @var{argv} 436argument, and should be an array of strings in the same format as for 437the @code{environ} variable. 438@end deftypefun 439 440@deftypefun int execvp (const char *@var{filename}, char *const @var{argv}@t{[]}) 441@standards{POSIX.1, unistd.h} 442@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} 443The @code{execvp} function is similar to @code{execv}, except that it 444searches the directories listed in the @code{PATH} environment variable 445(@pxref{Standard Environment}) to find the full file name of a 446file from @var{filename} if @var{filename} does not contain a slash. 447 448This function is useful for executing system utility programs, because 449it looks for them in the places that the user has chosen. Shells use it 450to run the commands that users type. 451@end deftypefun 452 453@deftypefun int execlp (const char *@var{filename}, const char *@var{arg0}, @dots{}) 454@standards{POSIX.1, unistd.h} 455@safety{@prelim{}@mtsafe{@mtsenv{}}@asunsafe{@ascuheap{}}@acunsafe{@acsmem{}}} 456This function is like @code{execl}, except that it performs the same 457file name searching as the @code{execvp} function. 458@end deftypefun 459 460The size of the argument list and environment list taken together must 461not be greater than @code{ARG_MAX} bytes. @xref{General Limits}. On 462@gnuhurdsystems{}, the size (which compares against @code{ARG_MAX}) 463includes, for each string, the number of characters in the string, plus 464the size of a @code{char *}, plus one, rounded up to a multiple of the 465size of a @code{char *}. Other systems may have somewhat different 466rules for counting. 467 468These functions normally don't return, since execution of a new program 469causes the currently executing program to go away completely. A value 470of @code{-1} is returned in the event of a failure. In addition to the 471usual file name errors (@pxref{File Name Errors}), the following 472@code{errno} error conditions are defined for these functions: 473 474@table @code 475@item E2BIG 476The combined size of the new program's argument list and environment 477list is larger than @code{ARG_MAX} bytes. @gnuhurdsystems{} have no 478specific limit on the argument list size, so this error code cannot 479result, but you may get @code{ENOMEM} instead if the arguments are too 480big for available memory. 481 482@item ENOEXEC 483The specified file can't be executed because it isn't in the right format. 484 485@item ENOMEM 486Executing the specified file requires more storage than is available. 487@end table 488 489If execution of the new file succeeds, it updates the access time field 490of the file as if the file had been read. @xref{File Times}, for more 491details about access times of files. 492 493The point at which the file is closed again is not specified, but 494is at some point before the process exits or before another process 495image is executed. 496 497Executing a new process image completely changes the contents of memory, 498copying only the argument and environment strings to new locations. But 499many other attributes of the process are unchanged: 500 501@itemize @bullet 502@item 503The process ID and the parent process ID. @xref{Process Creation Concepts}. 504 505@item 506Session and process group membership. @xref{Concepts of Job Control}. 507 508@item 509Real user ID and group ID, and supplementary group IDs. @xref{Process 510Persona}. 511 512@item 513Pending alarms. @xref{Setting an Alarm}. 514 515@item 516Current working directory and root directory. @xref{Working 517Directory}. On @gnuhurdsystems{}, the root directory is not copied when 518executing a setuid program; instead the system default root directory 519is used for the new program. 520 521@item 522File mode creation mask. @xref{Setting Permissions}. 523 524@item 525Process signal mask; see @ref{Process Signal Mask}. 526 527@item 528Pending signals; see @ref{Blocking Signals}. 529 530@item 531Elapsed processor time associated with the process; see @ref{Processor Time}. 532@end itemize 533 534If the set-user-ID and set-group-ID mode bits of the process image file 535are set, this affects the effective user ID and effective group ID 536(respectively) of the process. These concepts are discussed in detail 537in @ref{Process Persona}. 538 539Signals that are set to be ignored in the existing process image are 540also set to be ignored in the new process image. All other signals are 541set to the default action in the new process image. For more 542information about signals, see @ref{Signal Handling}. 543 544File descriptors open in the existing process image remain open in the 545new process image, unless they have the @code{FD_CLOEXEC} 546(close-on-exec) flag set. The files that remain open inherit all 547attributes of the open file descriptors from the existing process image, 548including file locks. File descriptors are discussed in @ref{Low-Level I/O}. 549 550Streams, by contrast, cannot survive through @code{exec} functions, 551because they are located in the memory of the process itself. The new 552process image has no streams except those it creates afresh. Each of 553the streams in the pre-@code{exec} process image has a descriptor inside 554it, and these descriptors do survive through @code{exec} (provided that 555they do not have @code{FD_CLOEXEC} set). The new process image can 556reconnect these to new streams using @code{fdopen} (@pxref{Descriptors 557and Streams}). 558 559@node Process Completion 560@section Process Completion 561@cindex process completion 562@cindex waiting for completion of child process 563@cindex testing exit status of child process 564 565The functions described in this section are used to wait for a child 566process to terminate or stop, and determine its status. These functions 567are declared in the header file @file{sys/wait.h}. 568@pindex sys/wait.h 569 570@deftypefun pid_t waitpid (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}) 571@standards{POSIX.1, sys/wait.h} 572@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 573The @code{waitpid} function is used to request status information from a 574child process whose process ID is @var{pid}. Normally, the calling 575process is suspended until the child process makes status information 576available by terminating. 577 578Other values for the @var{pid} argument have special interpretations. A 579value of @code{-1} or @code{WAIT_ANY} requests status information for 580any child process; a value of @code{0} or @code{WAIT_MYPGRP} requests 581information for any child process in the same process group as the 582calling process; and any other negative value @minus{} @var{pgid} 583requests information for any child process whose process group ID is 584@var{pgid}. 585 586If status information for a child process is available immediately, this 587function returns immediately without waiting. If more than one eligible 588child process has status information available, one of them is chosen 589randomly, and its status is returned immediately. To get the status 590from the other eligible child processes, you need to call @code{waitpid} 591again. 592 593The @var{options} argument is a bit mask. Its value should be the 594bitwise OR (that is, the @samp{|} operator) of zero or more of the 595@code{WNOHANG} and @code{WUNTRACED} flags. You can use the 596@code{WNOHANG} flag to indicate that the parent process shouldn't wait; 597and the @code{WUNTRACED} flag to request status information from stopped 598processes as well as processes that have terminated. 599 600The status information from the child process is stored in the object 601that @var{status-ptr} points to, unless @var{status-ptr} is a null pointer. 602 603This function is a cancellation point in multi-threaded programs. This 604is a problem if the thread allocates some resources (like memory, file 605descriptors, semaphores or whatever) at the time @code{waitpid} is 606called. If the thread gets canceled these resources stay allocated 607until the program ends. To avoid this calls to @code{waitpid} should be 608protected using cancellation handlers. 609@c ref pthread_cleanup_push / pthread_cleanup_pop 610 611The return value is normally the process ID of the child process whose 612status is reported. If there are child processes but none of them is 613waiting to be noticed, @code{waitpid} will block until one is. However, 614if the @code{WNOHANG} option was specified, @code{waitpid} will return 615zero instead of blocking. 616 617If a specific PID to wait for was given to @code{waitpid}, it will 618ignore all other children (if any). Therefore if there are children 619waiting to be noticed but the child whose PID was specified is not one 620of them, @code{waitpid} will block or return zero as described above. 621 622A value of @code{-1} is returned in case of error. The following 623@code{errno} error conditions are defined for this function: 624 625@table @code 626@item EINTR 627The function was interrupted by delivery of a signal to the calling 628process. @xref{Interrupted Primitives}. 629 630@item ECHILD 631There are no child processes to wait for, or the specified @var{pid} 632is not a child of the calling process. 633 634@item EINVAL 635An invalid value was provided for the @var{options} argument. 636@end table 637@end deftypefun 638 639These symbolic constants are defined as values for the @var{pid} argument 640to the @code{waitpid} function. 641 642@comment Extra blank lines make it look better. 643@vtable @code 644@item WAIT_ANY 645 646This constant macro (whose value is @code{-1}) specifies that 647@code{waitpid} should return status information about any child process. 648 649 650@item WAIT_MYPGRP 651This constant (with value @code{0}) specifies that @code{waitpid} should 652return status information about any child process in the same process 653group as the calling process. 654@end vtable 655 656These symbolic constants are defined as flags for the @var{options} 657argument to the @code{waitpid} function. You can bitwise-OR the flags 658together to obtain a value to use as the argument. 659 660@vtable @code 661@item WNOHANG 662 663This flag specifies that @code{waitpid} should return immediately 664instead of waiting, if there is no child process ready to be noticed. 665 666@item WUNTRACED 667 668This flag specifies that @code{waitpid} should report the status of any 669child processes that have been stopped as well as those that have 670terminated. 671@end vtable 672 673@deftypefun pid_t wait (int *@var{status-ptr}) 674@standards{POSIX.1, sys/wait.h} 675@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 676This is a simplified version of @code{waitpid}, and is used to wait 677until any one child process terminates. The call: 678 679@smallexample 680wait (&status) 681@end smallexample 682 683@noindent 684is exactly equivalent to: 685 686@smallexample 687waitpid (-1, &status, 0) 688@end smallexample 689 690This function is a cancellation point in multi-threaded programs. This 691is a problem if the thread allocates some resources (like memory, file 692descriptors, semaphores or whatever) at the time @code{wait} is 693called. If the thread gets canceled these resources stay allocated 694until the program ends. To avoid this calls to @code{wait} should be 695protected using cancellation handlers. 696@c ref pthread_cleanup_push / pthread_cleanup_pop 697@end deftypefun 698 699@deftypefun pid_t wait4 (pid_t @var{pid}, int *@var{status-ptr}, int @var{options}, struct rusage *@var{usage}) 700@standards{BSD, sys/wait.h} 701@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 702If @var{usage} is a null pointer, @code{wait4} is equivalent to 703@code{waitpid (@var{pid}, @var{status-ptr}, @var{options})}. 704 705If @var{usage} is not null, @code{wait4} stores usage figures for the 706child process in @code{*@var{rusage}} (but only if the child has 707terminated, not if it has stopped). @xref{Resource Usage}. 708 709This function is a BSD extension. 710@end deftypefun 711 712Here's an example of how to use @code{waitpid} to get the status from 713all child processes that have terminated, without ever waiting. This 714function is designed to be a handler for @code{SIGCHLD}, the signal that 715indicates that at least one child process has terminated. 716 717@smallexample 718@group 719void 720sigchld_handler (int signum) 721@{ 722 int pid, status, serrno; 723 serrno = errno; 724 while (1) 725 @{ 726 pid = waitpid (WAIT_ANY, &status, WNOHANG); 727 if (pid < 0) 728 @{ 729 perror ("waitpid"); 730 break; 731 @} 732 if (pid == 0) 733 break; 734 notice_termination (pid, status); 735 @} 736 errno = serrno; 737@} 738@end group 739@end smallexample 740 741@node Process Completion Status 742@section Process Completion Status 743 744If the exit status value (@pxref{Program Termination}) of the child 745process is zero, then the status value reported by @code{waitpid} or 746@code{wait} is also zero. You can test for other kinds of information 747encoded in the returned status value using the following macros. 748These macros are defined in the header file @file{sys/wait.h}. 749@pindex sys/wait.h 750 751@deftypefn Macro int WIFEXITED (int @var{status}) 752@standards{POSIX.1, sys/wait.h} 753@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 754This macro returns a nonzero value if the child process terminated 755normally with @code{exit} or @code{_exit}. 756@end deftypefn 757 758@deftypefn Macro int WEXITSTATUS (int @var{status}) 759@standards{POSIX.1, sys/wait.h} 760@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 761If @code{WIFEXITED} is true of @var{status}, this macro returns the 762low-order 8 bits of the exit status value from the child process. 763@xref{Exit Status}. 764@end deftypefn 765 766@deftypefn Macro int WIFSIGNALED (int @var{status}) 767@standards{POSIX.1, sys/wait.h} 768@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 769This macro returns a nonzero value if the child process terminated 770because it received a signal that was not handled. 771@xref{Signal Handling}. 772@end deftypefn 773 774@deftypefn Macro int WTERMSIG (int @var{status}) 775@standards{POSIX.1, sys/wait.h} 776@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 777If @code{WIFSIGNALED} is true of @var{status}, this macro returns the 778signal number of the signal that terminated the child process. 779@end deftypefn 780 781@deftypefn Macro int WCOREDUMP (int @var{status}) 782@standards{BSD, sys/wait.h} 783@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 784This macro returns a nonzero value if the child process terminated 785and produced a core dump. 786@end deftypefn 787 788@deftypefn Macro int WIFSTOPPED (int @var{status}) 789@standards{POSIX.1, sys/wait.h} 790@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 791This macro returns a nonzero value if the child process is stopped. 792@end deftypefn 793 794@deftypefn Macro int WSTOPSIG (int @var{status}) 795@standards{POSIX.1, sys/wait.h} 796@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 797If @code{WIFSTOPPED} is true of @var{status}, this macro returns the 798signal number of the signal that caused the child process to stop. 799@end deftypefn 800 801 802@node BSD Wait Functions 803@section BSD Process Wait Function 804 805@Theglibc{} also provides the @code{wait3} function for compatibility 806with BSD. This function is declared in @file{sys/wait.h}. It is the 807predecessor to @code{wait4}, which is more flexible. @code{wait3} is 808now obsolete. 809@pindex sys/wait.h 810 811@deftypefun pid_t wait3 (int *@var{status-ptr}, int @var{options}, struct rusage *@var{usage}) 812@standards{BSD, sys/wait.h} 813@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}} 814If @var{usage} is a null pointer, @code{wait3} is equivalent to 815@code{waitpid (-1, @var{status-ptr}, @var{options})}. 816 817If @var{usage} is not null, @code{wait3} stores usage figures for the 818child process in @code{*@var{rusage}} (but only if the child has 819terminated, not if it has stopped). @xref{Resource Usage}. 820@end deftypefun 821 822@node Process Creation Example 823@section Process Creation Example 824 825Here is an example program showing how you might write a function 826similar to the built-in @code{system}. It executes its @var{command} 827argument using the equivalent of @samp{sh -c @var{command}}. 828 829@smallexample 830#include <stddef.h> 831#include <stdlib.h> 832#include <unistd.h> 833#include <sys/types.h> 834#include <sys/wait.h> 835 836/* @r{Execute the command using this shell program.} */ 837#define SHELL "/bin/sh" 838 839@group 840int 841my_system (const char *command) 842@{ 843 int status; 844 pid_t pid; 845@end group 846 847 pid = fork (); 848 if (pid == 0) 849 @{ 850 /* @r{This is the child process. Execute the shell command.} */ 851 execl (SHELL, SHELL, "-c", command, NULL); 852 _exit (EXIT_FAILURE); 853 @} 854 else if (pid < 0) 855 /* @r{The fork failed. Report failure.} */ 856 status = -1; 857 else 858 /* @r{This is the parent process. Wait for the child to complete.} */ 859 if (waitpid (pid, &status, 0) != pid) 860 status = -1; 861 return status; 862@} 863@end smallexample 864 865@comment Yes, this example has been tested. 866 867There are a couple of things you should pay attention to in this 868example. 869 870Remember that the first @code{argv} argument supplied to the program 871represents the name of the program being executed. That is why, in the 872call to @code{execl}, @code{SHELL} is supplied once to name the program 873to execute and a second time to supply a value for @code{argv[0]}. 874 875The @code{execl} call in the child process doesn't return if it is 876successful. If it fails, you must do something to make the child 877process terminate. Just returning a bad status code with @code{return} 878would leave two processes running the original program. Instead, the 879right behavior is for the child process to report failure to its parent 880process. 881 882Call @code{_exit} to accomplish this. The reason for using @code{_exit} 883instead of @code{exit} is to avoid flushing fully buffered streams such 884as @code{stdout}. The buffers of these streams probably contain data 885that was copied from the parent process by the @code{fork}, data that 886will be output eventually by the parent process. Calling @code{exit} in 887the child would output the data twice. @xref{Termination Internals}. 888