Annotation of prex/include/sys/wait.h, Revision 1.1
1.1 ! nbrk 1: /*
! 2: * Copyright (c) 1982, 1986, 1989, 1993, 1994
! 3: * The Regents of the University of California. All rights reserved.
! 4: *
! 5: * Redistribution and use in source and binary forms, with or without
! 6: * modification, are permitted provided that the following conditions
! 7: * are met:
! 8: * 1. Redistributions of source code must retain the above copyright
! 9: * notice, this list of conditions and the following disclaimer.
! 10: * 2. Redistributions in binary form must reproduce the above copyright
! 11: * notice, this list of conditions and the following disclaimer in the
! 12: * documentation and/or other materials provided with the distribution.
! 13: * 3. Neither the name of the University nor the names of its contributors
! 14: * may be used to endorse or promote products derived from this software
! 15: * without specific prior written permission.
! 16: *
! 17: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 18: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 19: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 20: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 21: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 22: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 23: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 24: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 25: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 26: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 27: * SUCH DAMAGE.
! 28: *
! 29: * @(#)wait.h 8.2 (Berkeley) 7/10/94
! 30: */
! 31:
! 32: /*
! 33: * This file holds definitions relevent to the wait4 system call
! 34: * and the alternate interfaces that use it (wait, wait3, waitpid).
! 35: */
! 36:
! 37: /*
! 38: * Macros to test the exit status returned by wait
! 39: * and extract the relevant values.
! 40: */
! 41: #ifdef _POSIX_SOURCE
! 42: #define _W_INT(i) (i)
! 43: #else
! 44: #define _W_INT(w) (*(int *)&(w)) /* convert union wait to int */
! 45: #define WCOREFLAG 0200
! 46: #endif
! 47:
! 48: #define _WSTATUS(x) (_W_INT(x) & 0177)
! 49: #define _WSTOPPED 0177 /* _WSTATUS if process is stopped */
! 50: #define WIFSTOPPED(x) (_WSTATUS(x) == _WSTOPPED)
! 51: #define WSTOPSIG(x) (_W_INT(x) >> 8)
! 52: #define WIFSIGNALED(x) (_WSTATUS(x) != _WSTOPPED && _WSTATUS(x) != 0)
! 53: #define WTERMSIG(x) (_WSTATUS(x))
! 54: #define WIFEXITED(x) (_WSTATUS(x) == 0)
! 55: #define WEXITSTATUS(x) (_W_INT(x) >> 8)
! 56: #ifndef _POSIX_SOURCE
! 57: #define WCOREDUMP(x) (_W_INT(x) & WCOREFLAG)
! 58:
! 59: #define W_EXITCODE(ret, sig) ((ret) << 8 | (sig))
! 60: #define W_STOPCODE(sig) ((sig) << 8 | _WSTOPPED)
! 61: #endif
! 62:
! 63: /*
! 64: * Option bits for the third argument of wait4. WNOHANG causes the
! 65: * wait to not hang if there are no stopped or terminated processes, rather
! 66: * returning an error indication in this case (pid==0). WUNTRACED
! 67: * indicates that the caller should receive status about untraced children
! 68: * which stop due to signals. If children are stopped and a wait without
! 69: * this option is done, it is as though they were still running... nothing
! 70: * about them is returned.
! 71: */
! 72: #define WNOHANG 1 /* don't hang in wait */
! 73: #define WUNTRACED 2 /* tell about stopped, untraced children */
! 74:
! 75: #ifndef _POSIX_SOURCE
! 76: /* POSIX extensions and 4.2/4.3 compatability: */
! 77:
! 78: /*
! 79: * Tokens for special values of the "pid" parameter to wait4.
! 80: */
! 81: #define WAIT_ANY (-1) /* any process */
! 82: #define WAIT_MYPGRP 0 /* any process in my process group */
! 83:
! 84: #include <sys/endian.h>
! 85:
! 86: /*
! 87: * Deprecated:
! 88: * Structure of the information in the status word returned by wait4.
! 89: * If w_stopval==WSTOPPED, then the second structure describes
! 90: * the information returned, else the first.
! 91: */
! 92: union wait {
! 93: int w_status; /* used in syscall */
! 94: /*
! 95: * Terminated process status.
! 96: */
! 97: struct {
! 98: #if BYTE_ORDER == LITTLE_ENDIAN
! 99: unsigned int w_Termsig:7, /* termination signal */
! 100: w_Coredump:1, /* core dump indicator */
! 101: w_Retcode:8, /* exit code if w_termsig==0 */
! 102: w_Filler:16; /* upper bits filler */
! 103: #endif
! 104: #if BYTE_ORDER == BIG_ENDIAN
! 105: unsigned int w_Filler:16, /* upper bits filler */
! 106: w_Retcode:8, /* exit code if w_termsig==0 */
! 107: w_Coredump:1, /* core dump indicator */
! 108: w_Termsig:7; /* termination signal */
! 109: #endif
! 110: } w_T;
! 111: /*
! 112: * Stopped process status. Returned
! 113: * only for traced children unless requested
! 114: * with the WUNTRACED option bit.
! 115: */
! 116: struct {
! 117: #if BYTE_ORDER == LITTLE_ENDIAN
! 118: unsigned int w_Stopval:8, /* == W_STOPPED if stopped */
! 119: w_Stopsig:8, /* signal that stopped us */
! 120: w_Filler:16; /* upper bits filler */
! 121: #endif
! 122: #if BYTE_ORDER == BIG_ENDIAN
! 123: unsigned int w_Filler:16, /* upper bits filler */
! 124: w_Stopsig:8, /* signal that stopped us */
! 125: w_Stopval:8; /* == W_STOPPED if stopped */
! 126: #endif
! 127: } w_S;
! 128: };
! 129: #define w_termsig w_T.w_Termsig
! 130: #define w_coredump w_T.w_Coredump
! 131: #define w_retcode w_T.w_Retcode
! 132: #define w_stopval w_S.w_Stopval
! 133: #define w_stopsig w_S.w_Stopsig
! 134:
! 135: #define WSTOPPED _WSTOPPED
! 136: #endif /* _POSIX_SOURCE */
! 137:
! 138: #ifndef KERNEL
! 139: #include <sys/types.h>
! 140: #include <sys/cdefs.h>
! 141:
! 142: __BEGIN_DECLS
! 143: struct rusage; /* forward declaration */
! 144:
! 145: pid_t wait(int *);
! 146: pid_t waitpid(pid_t, int *, int);
! 147:
! 148: __END_DECLS
! 149: #endif
CVSweb