Editing.
[kopensolaris-gnu/glibc.git] / manual / process.texi
index 56edf2d..c17c4b0 100644 (file)
@@ -1,4 +1,5 @@
-@node Processes
+@node Processes, Job Control, Program Basics, Top
+@c %MENU% How to create processes and run other programs
 @chapter Processes
 
 @cindex process
 @chapter Processes
 
 @cindex process
@@ -62,16 +63,15 @@ possible to create the shell process, and otherwise is the status of the
 shell process.  @xref{Process Completion}, for details on how this
 status code can be interpreted.
 
 shell process.  @xref{Process Completion}, for details on how this
 status code can be interpreted.
 
-If the @var{command} argument is a null pointer a non-zero return value
-indicates that a command processor is available and this function can be
-used at all.
+If the @var{command} argument is a null pointer, a return value of zero
+indicates that no command processor is available.
 
 
-This function is a cancelation point in multi-threaded programs.  This
+This function is a cancellation point in multi-threaded programs.  This
 is a problem if the thread allocates some resources (like memory, file
 descriptors, semaphores or whatever) at the time @code{system} is
 called.  If the thread gets canceled these resources stay allocated
 until the program ends.  To avoid this calls to @code{system} should be
 is a problem if the thread allocates some resources (like memory, file
 descriptors, semaphores or whatever) at the time @code{system} is
 called.  If the thread gets canceled these resources stay allocated
 until the program ends.  To avoid this calls to @code{system} should be
-protected using cancelation handlers.
+protected using cancellation handlers.
 @c ref pthread_cleanup_push / pthread_cleanup_pop
 
 @pindex stdlib.h
 @c ref pthread_cleanup_push / pthread_cleanup_pop
 
 @pindex stdlib.h
@@ -242,15 +242,15 @@ signals and signal actions from the parent process.)
 @comment unistd.h
 @comment BSD
 @deftypefun pid_t vfork (void)
 @comment unistd.h
 @comment BSD
 @deftypefun pid_t vfork (void)
-The @code{vfork} function is similar to @code{fork} but on systems it
-is more efficient; however, there are restrictions you must follow to
+The @code{vfork} function is similar to @code{fork} but on some systems
+it is more efficient; however, there are restrictions you must follow to
 use it safely.
 
 use it safely.
 
-While @code{fork} makes a complete copy of the calling process's
-address space and allows both the parent and child to execute
-independently, @code{vfork} does not make this copy.  Instead, the
-child process created with @code{vfork} shares its parent's address
-space until it calls exits or one of the @code{exec} functions.  In the
+While @code{fork} makes a complete copy of the calling process's address
+space and allows both the parent and child to execute independently,
+@code{vfork} does not make this copy.  Instead, the child process
+created with @code{vfork} shares its parent's address space until it
+calls @code{_exit} or one of the @code{exec} functions.  In the
 meantime, the parent process suspends execution.
 
 You must be very careful not to allow the child process created with
 meantime, the parent process suspends execution.
 
 You must be very careful not to allow the child process created with
@@ -276,6 +276,9 @@ This section describes the @code{exec} family of functions, for executing
 a file as a process image.  You can use these functions to make a child
 process execute a new program after it has been forked.
 
 a file as a process image.  You can use these functions to make a child
 process execute a new program after it has been forked.
 
+To see the effects of @code{exec} from the point of view of the called
+program, @xref{Program Basics}.
+
 @pindex unistd.h
 The functions in this family differ in how you specify the arguments,
 but otherwise they all do the same thing.  They are declared in the
 @pindex unistd.h
 The functions in this family differ in how you specify the arguments,
 but otherwise they all do the same thing.  They are declared in the
@@ -489,19 +492,27 @@ processes as well as processes that have terminated.
 The status information from the child process is stored in the object
 that @var{status-ptr} points to, unless @var{status-ptr} is a null pointer.
 
 The status information from the child process is stored in the object
 that @var{status-ptr} points to, unless @var{status-ptr} is a null pointer.
 
-This function is a cancelation point in multi-threaded programs.  This
+This function is a cancellation point in multi-threaded programs.  This
 is a problem if the thread allocates some resources (like memory, file
 descriptors, semaphores or whatever) at the time @code{waitpid} is
 called.  If the thread gets canceled these resources stay allocated
 until the program ends.  To avoid this calls to @code{waitpid} should be
 is a problem if the thread allocates some resources (like memory, file
 descriptors, semaphores or whatever) at the time @code{waitpid} is
 called.  If the thread gets canceled these resources stay allocated
 until the program ends.  To avoid this calls to @code{waitpid} should be
-protected using cancelation handlers.
+protected using cancellation handlers.
 @c ref pthread_cleanup_push / pthread_cleanup_pop
 
 The return value is normally the process ID of the child process whose
 @c ref pthread_cleanup_push / pthread_cleanup_pop
 
 The return value is normally the process ID of the child process whose
-status is reported.  If the @code{WNOHANG} option was specified and no
-child process is waiting to be noticed, the value is zero.  A value of
-@code{-1} is returned in case of error.  The following @code{errno}
-error conditions are defined for this function:
+status is reported.  If there are child processes but none of them is
+waiting to be noticed, @code{waitpid} will block until one is.  However,
+if the @code{WNOHANG} option was specified, @code{waitpid} will return
+zero instead of blocking.
+
+If a specific PID to wait for was given to @code{waitpid}, it will
+ignore all other children (if any).  Therefore if there are children
+waiting to be noticed but the child whose PID was specified is not one
+of them, @code{waitpid} will block or return zero as described above.
+
+A value of @code{-1} is returned in case of error.  The following
+@code{errno} error conditions are defined for this function:
 
 @table @code
 @item EINTR
 
 @table @code
 @item EINTR
@@ -568,12 +579,12 @@ is exactly equivalent to:
 waitpid (-1, &status, 0)
 @end smallexample
 
 waitpid (-1, &status, 0)
 @end smallexample
 
-This function is a cancelation point in multi-threaded programs.  This
+This function is a cancellation point in multi-threaded programs.  This
 is a problem if the thread allocates some resources (like memory, file
 descriptors, semaphores or whatever) at the time @code{wait} is
 called.  If the thread gets canceled these resources stay allocated
 until the program ends.  To avoid this calls to @code{wait} should be
 is a problem if the thread allocates some resources (like memory, file
 descriptors, semaphores or whatever) at the time @code{wait} is
 called.  If the thread gets canceled these resources stay allocated
 until the program ends.  To avoid this calls to @code{wait} should be
-protected using cancelation handlers.
+protected using cancellation handlers.
 @c ref pthread_cleanup_push / pthread_cleanup_pop
 @end deftypefun
 
 @c ref pthread_cleanup_push / pthread_cleanup_pop
 @end deftypefun
 
@@ -600,8 +611,8 @@ indicates that at least one child process has terminated.
 void
 sigchld_handler (int signum)
 @{
 void
 sigchld_handler (int signum)
 @{
-  int pid;
-  int status;
+  int pid, status, serrno;
+  serrno = errno;
   while (1)
     @{
       pid = waitpid (WAIT_ANY, &status, WNOHANG);
   while (1)
     @{
       pid = waitpid (WAIT_ANY, &status, WNOHANG);
@@ -614,6 +625,7 @@ sigchld_handler (int signum)
         break;
       notice_termination (pid, status);
     @}
         break;
       notice_termination (pid, status);
     @}
+  errno = serrno;
 @}
 @end group
 @end smallexample
 @}
 @end group
 @end smallexample
@@ -701,19 +713,19 @@ the following members:
 
 @table @code
 @item int w_termsig
 
 @table @code
 @item int w_termsig
-The value of this member is the same as the result of the
+The value of this member is the same as that of the
 @code{WTERMSIG} macro.
 
 @item int w_coredump
 @code{WTERMSIG} macro.
 
 @item int w_coredump
-The value of this member is the same as the result of the
+The value of this member is the same as that of the
 @code{WCOREDUMP} macro.
 
 @item int w_retcode
 @code{WCOREDUMP} macro.
 
 @item int w_retcode
-The value of this member is the same as the result of the
+The value of this member is the same as that of the
 @code{WEXITSTATUS} macro.
 
 @item int w_stopsig
 @code{WEXITSTATUS} macro.
 
 @item int w_stopsig
-The value of this member is the same as the result of the
+The value of this member is the same as that of the
 @code{WSTOPSIG} macro.
 @end table
 
 @code{WSTOPSIG} macro.
 @end table