add posix macros, update for wait4. (still need to hack _posix_source_)
authorMike Karels <karels@ucbvax.Berkeley.EDU>
Sun, 9 Apr 1989 06:56:09 +0000 (22:56 -0800)
committerMike Karels <karels@ucbvax.Berkeley.EDU>
Sun, 9 Apr 1989 06:56:09 +0000 (22:56 -0800)
SCCS-vsn: sys/sys/wait.h 7.5

usr/src/sys/sys/wait.h

index b7bc829..a6e5067 100644 (file)
@@ -1,18 +1,25 @@
 /*
 /*
- * Copyright (c) 1982, 1986 Regents of the University of California.
- * All rights reserved.  The Berkeley software License Agreement
- * specifies the terms and conditions for redistribution.
+ * Copyright (c) 1982, 1986, 1989 The Regents of the University of California.
+ * All rights reserved.
  *
  *
- *     @(#)wait.h      7.4 (Berkeley) %G%
+ * Redistribution and use in source and binary forms are permitted
+ * provided that the above copyright notice and this paragraph are
+ * duplicated in all such forms and that any documentation,
+ * advertising materials, and other materials related to such
+ * distribution and use acknowledge that the software was developed
+ * by the University of California, Berkeley.  The name of the
+ * University may not be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+ *
+ *     @(#)wait.h      7.5 (Berkeley) %G%
  */
 
 /*
  */
 
 /*
- * This file holds definitions relevent to the wait system call.
- * Some of the options here are available only through the ``wait3''
- * entry point; the old entry point with one argument has more fixed
- * semantics, never returning status of unstopped children, hanging until
- * a process terminates if any are outstanding, and never returns
- * detailed information about process resource utilization (<vtimes.h>).
+ * This file holds definitions relevent to the wait4 system call
+ * and the alternate interfaces that use it (wait, wait3, waitpid).
  */
 
 #ifndef BYTE_ORDER
  */
 
 #ifndef BYTE_ORDER
 #endif
 
 /*
 #endif
 
 /*
- * Structure of the information in the first word returned by both
- * wait and wait3.  If w_stopval==WSTOPPED, then the second structure
- * describes the information returned, else the first.  See WUNTRACED below.
+ * Tokens for special values of the "pid" parameter to wait4.
+ */
+#define        WAIT_ANY        (-1)            /* any process */
+#define        WAIT_MYPGRP     0               /* any process in my process group */
+
+/*
+ * Structure of the information in the status word returned by wait4.
+ * If w_stopval==WSTOPPED, then the second structure describes
+ * the information returned, else the first.  See WUNTRACED below.
  */
  */
-union wait     {
+union wait {
        int     w_status;               /* used in syscall */
        /*
         * Terminated process status.
        int     w_status;               /* used in syscall */
        /*
         * Terminated process status.
@@ -68,17 +81,30 @@ union wait  {
 #define        WSTOPPED        0177    /* value of s.stopval if process is stopped */
 
 /*
 #define        WSTOPPED        0177    /* value of s.stopval if process is stopped */
 
 /*
- * Option bits for the second argument of wait3.  WNOHANG causes the
+ * Option bits for the second argument of wait4.  WNOHANG causes the
  * wait to not hang if there are no stopped or terminated processes, rather
  * returning an error indication in this case (pid==0).  WUNTRACED
  * indicates that the caller should receive status about untraced children
  * which stop due to signals.  If children are stopped and a wait without
  * this option is done, it is as though they were still running... nothing
  * wait to not hang if there are no stopped or terminated processes, rather
  * returning an error indication in this case (pid==0).  WUNTRACED
  * indicates that the caller should receive status about untraced children
  * which stop due to signals.  If children are stopped and a wait without
  * this option is done, it is as though they were still running... nothing
- * about them is returned.
+ * about them is returned.   By default, a blocking wait call will be
+ * aborted by receipt of a signal that is caught (POSIX); the option
+ * WSIGRESTART causes the call to restart instead of failing with error EINTR.
  */
 #define WNOHANG                1       /* dont hang in wait */
 #define WUNTRACED      2       /* tell about stopped, untraced children */
  */
 #define WNOHANG                1       /* dont hang in wait */
 #define WUNTRACED      2       /* tell about stopped, untraced children */
+#define WSIGRESTART    4       /* restart wait if signal is received */
 
 
+/*
+ * Macros to test the exit status returned by wait
+ * and extract the relevant values.
+ */
 #define WIFSTOPPED(x)  ((x).w_stopval == WSTOPPED)
 #define WIFSTOPPED(x)  ((x).w_stopval == WSTOPPED)
+#define WSTOPSIG(x)    ((x).w_stopsig)
+
 #define WIFSIGNALED(x) ((x).w_stopval != WSTOPPED && (x).w_termsig != 0)
 #define WIFSIGNALED(x) ((x).w_stopval != WSTOPPED && (x).w_termsig != 0)
+#define WTERMSIG(x)    ((x).w_termsig)
+#define WCOREDUMP(x)   ((x).w_coredump)
+
 #define WIFEXITED(x)   ((x).w_stopval != WSTOPPED && (x).w_termsig == 0)
 #define WIFEXITED(x)   ((x).w_stopval != WSTOPPED && (x).w_termsig == 0)
+#define WEXITSTATUS(x) ((x).w_retcode)