/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License, Version 1.0 only * (the "License"). You may not use this file except in compliance * with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 1997 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* Copyright (c) 1983, 1984, 1985, 1986, 1987, 1988, 1989 AT&T */ /* All Rights Reserved */ /* * Portions of this source code were derived from Berkeley 4.3 BSD * under license from the Regents of the University of California. */ #ifndef _SYS_WAIT_H #define _SYS_WAIT_H #pragma ident "%Z%%M% %I% %E% SMI" #include #include #ifdef __cplusplus extern "C" { #endif /* * This wait.h is a combination of SunOS's wait.h and SysV wait.h * The structure 'union wait' is taken from SunOS, while the * rest of the #define's are from SysV. */ /* * 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. */ union wait { int w_status; /* used in syscall */ /* * Terminated process status. */ struct { #if defined(_BIT_FIELDS_LTOH) unsigned short w_Termsig:7; /* termination signal */ unsigned short w_Coredump:1; /* core dump indicator */ unsigned short w_Retcode:8; /* exit code if w_termsig==0 */ #else unsigned short w_Fill1:16; /* high 16 bits unused */ unsigned short w_Retcode:8; /* exit code if w_termsig==0 */ unsigned short w_Coredump:1; /* core dump indicator */ unsigned short w_Termsig:7; /* termination signal */ #endif } w_T; /* * Stopped process status. Returned * only for traced children unless requested * with the WUNTRACED option bit. */ struct { #if defined(_BIT_FIELDS_LTOH) unsigned short w_Stopval:8; /* == W_STOPPED if stopped */ unsigned short w_Stopsig:8; /* signal that stopped us */ #else unsigned short w_Fill2:16; /* high 16 bits unused */ unsigned short w_Stopsig:8; /* signal that stopped us */ unsigned short w_Stopval:8; /* == W_STOPPED if stopped */ #endif } w_S; }; #define w_termsig w_T.w_Termsig #define w_coredump w_T.w_Coredump #define w_retcode w_T.w_Retcode #define w_stopval w_S.w_Stopval #define w_stopsig w_S.w_Stopsig /* ----- begin SysV wait.h ----- */ #include #ifdef BUS_OBJERR /* Namespace conflict */ #undef BUS_OBJERR #endif #include #include /* * arguments to wait functions */ #define WEXITED 0001 /* wait for processes that have exite */ #define WTRAPPED 0002 /* wait for processes stopped while tracing */ #define N_WSTOPPED 0004 /* wait for processes stopped by signals */ #define WCONTINUED 0010 /* wait for processes continued */ #define WUNTRACED N_WSTOPPED /* for POSIX */ #define WNOHANG 0100 /* non blocking form of wait */ #define WNOWAIT 0200 /* non destructive form of wait */ #define WOPTMASK (WEXITED|WTRAPPED|WSTOPPED|WCONTINUED|WNOHANG|WNOWAIT) /* * macros for stat return from wait functions */ #define WSTOPFLG 0177 #define WSTOPPED WSTOPFLG /* This is for source compatibility w/ SunOS */ #define WCONTFLG 0177777 #define WCOREFLG 0200 #define WSIGMASK 0177 #define WLOBYTE(stat) ((int)((stat)&0377)) #define WHIBYTE(stat) ((int)(((stat)>>8)&0377)) #define WWORD(stat) ((int)((stat))&0177777) #define WIFEXITED(stat) (WLOBYTE(stat) == 0) #define WIFSIGNALED(stat) (WLOBYTE(stat) > 0 && WHIBYTE(stat) == 0) #define WIFSTOPPED(stat) (WLOBYTE(stat) == WSTOPFLG&&WHIBYTE(stat) != 0) #define WIFCONTINUED(stat) (WWORD(stat) == WCONTFLG) #define WEXITSTATUS(stat) WHIBYTE(stat) #define WTERMSIG(stat) (WLOBYTE(stat)&WSIGMASK) #define WSTOPSIG(stat) WHIBYTE(stat) #define WCOREDUMP(stat) ((stat)&WCOREFLG) #if !defined(_KERNEL) #if defined(__STDC__) extern pid_t wait(int *); extern pid_t waitpid(pid_t, int *, int); extern int waitid(idtype_t, id_t, siginfo_t *, int); extern pid_t wait4(pid_t, int *, int, struct rusage *); extern pid_t wait3(int *, int, struct rusage *); #else extern pid_t wait(); extern pid_t waitpid(); extern int waitid(); #endif /* __STDC__ */ #endif /* _KERNEL */ #ifdef __cplusplus } #endif #endif /* _SYS_WAIT_H */