1 /* 2 * Copyright 1989 Sun Microsystems, Inc. All rights reserved. 3 * Use is subject to license terms. 4 */ 5 6 /* 7 * Copyright (c) 1982, 1986 Regents of the University of California. 8 * All rights reserved. The Berkeley software License Agreement 9 * specifies the terms and conditions for redistribution. 10 */ 11 12 #ifndef __sys_wait_h 13 #define __sys_wait_h 14 15 #pragma ident "%Z%%M% %I% %E% SMI" 16 17 /* 18 * This file holds definitions relevant to the wait system call. 19 * Some of the options here are available only through the ``wait3'' 20 * entry point; the old entry point with one argument has more fixed 21 * semantics, never returning status of unstopped children, hanging until 22 * a process terminates if any are outstanding, and never returns 23 * detailed information about process resource utilization (<vtimes.h>). 24 */ 25 26 #ifndef _POSIX_SOURCE 27 #define __wait wait 28 #define w_termsig __w_termsig 29 #define w_coredump __w_coredump 30 #define w_retcode __w_retcode 31 #define w_stopval __w_stopval 32 #define w_stopsig __w_stopsig 33 #define WSTOPPED _WSTOPPED 34 #endif /* !_POSIX_SOURCE */ 35 36 /* 37 * Structure of the information in the first word returned by both 38 * wait and wait3. If w_stopval==WSTOPPED, then the second structure 39 * describes the information returned, else the first. See WUNTRACED below. 40 */ 41 union __wait { 42 int w_status; /* used in syscall */ 43 /* 44 * Terminated process status. 45 */ 46 struct { 47 unsigned short w_Fill1:16; /* high 16 bits unused */ 48 unsigned short w_Retcode:8; /* exit code if w_termsig==0 */ 49 unsigned short w_Coredump:1; /* core dump indicator */ 50 unsigned short w_Termsig:7; /* termination signal */ 51 } w_T; 52 /* 53 * Stopped process status. Returned 54 * only for traced children unless requested 55 * with the WUNTRACED option bit. 56 */ 57 struct { 58 unsigned short w_Fill2:16; /* high 16 bits unused */ 59 unsigned short w_Stopsig:8; /* signal that stopped us */ 60 unsigned short w_Stopval:8; /* == W_STOPPED if stopped */ 61 } w_S; 62 }; 63 #define __w_termsig w_T.w_Termsig 64 #define __w_coredump w_T.w_Coredump 65 #define __w_retcode w_T.w_Retcode 66 #define __w_stopval w_S.w_Stopval 67 #define __w_stopsig w_S.w_Stopsig 68 #define _WSTOPPED 0177 /* value of s.stopval if process is stopped */ 69 70 /* 71 * Option bits for the second argument of wait3. WNOHANG causes the 72 * wait to not hang if there are no stopped or terminated processes, rather 73 * returning an error indication in this case (pid==0). WUNTRACED 74 * indicates that the caller should receive status about untraced children 75 * which stop due to signals. If children are stopped and a wait without 76 * this option is done, it is as though they were still running... nothing 77 * about them is returned. 78 */ 79 #define WNOHANG 1 /* dont hang in wait */ 80 #define WUNTRACED 2 /* tell about stopped, untraced children */ 81 82 #define WIFSTOPPED(x) (((union __wait*)&(x))->__w_stopval == _WSTOPPED) 83 #define WIFSIGNALED(x) (((union __wait*)&(x))->__w_stopval != _WSTOPPED && \ 84 ((union __wait*)&(x))->__w_termsig != 0) 85 #define WIFEXITED(x) (((union __wait*)&(x))->__w_stopval != _WSTOPPED && \ 86 ((union __wait*)&(x))->__w_termsig == 0) 87 #define WEXITSTATUS(x) (((union __wait*)&(x))->__w_retcode) 88 #define WTERMSIG(x) (((union __wait*)&(x))->__w_termsig) 89 #define WSTOPSIG(x) (((union __wait*)&(x))->__w_stopsig) 90 91 #include <sys/stdtypes.h> 92 93 pid_t wait(/* int *loc */); 94 pid_t waitpid(/* pid_t pid, int *loc, int opts */); 95 96 #endif /* !__sys_wait_h */ 97