xref: /titanic_50/usr/src/lib/libbc/inc/include/sys/wait.h (revision 554ff184129088135ad2643c1c9832174a17be88)
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 #pragma ident	"%Z%%M%	%I%	%E% SMI"
13 
14 /*
15  * This file holds definitions relevent to the wait system call.
16  * Some of the options here are available only through the ``wait3''
17  * entry point; the old entry point with one argument has more fixed
18  * semantics, never returning status of unstopped children, hanging until
19  * a process terminates if any are outstanding, and never returns
20  * detailed information about process resource utilization (<vtimes.h>).
21  */
22 
23 #ifndef	__sys_wait_h
24 #define	__sys_wait_h
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 #if	defined(vax) || defined(i386)
48 		unsigned short	w_Termsig:7;	/* termination signal */
49 		unsigned short	w_Coredump:1;	/* core dump indicator */
50 		unsigned short	w_Retcode:8;	/* exit code if w_termsig==0 */
51 #endif
52 #if	defined(mc68000) || defined(sparc)
53 		unsigned short	w_Fill1:16;	/* high 16 bits unused */
54 		unsigned short	w_Retcode:8;	/* exit code if w_termsig==0 */
55 		unsigned short	w_Coredump:1;	/* core dump indicator */
56 		unsigned short	w_Termsig:7;	/* termination signal */
57 #endif
58 	} w_T;
59 	/*
60 	 * Stopped process status.  Returned
61 	 * only for traced children unless requested
62 	 * with the WUNTRACED option bit.
63 	 */
64 	struct {
65 #if	defined(vax) || defined(i386)
66 		unsigned short	w_Stopval:8;	/* == W_STOPPED if stopped */
67 		unsigned short	w_Stopsig:8;	/* signal that stopped us */
68 #endif
69 #if	defined(mc68000) || defined(sparc)
70 		unsigned short	w_Fill2:16;	/* high 16 bits unused */
71 		unsigned short	w_Stopsig:8;	/* signal that stopped us */
72 		unsigned short	w_Stopval:8;	/* == W_STOPPED if stopped */
73 #endif
74 	} w_S;
75 };
76 #define	__w_termsig	w_T.w_Termsig
77 #define	__w_coredump	w_T.w_Coredump
78 #define	__w_retcode	w_T.w_Retcode
79 #define	__w_stopval	w_S.w_Stopval
80 #define	__w_stopsig	w_S.w_Stopsig
81 #define	_WSTOPPED	0177	/* value of s.stopval if process is stopped */
82 
83 /*
84  * Option bits for the second argument of wait3.  WNOHANG causes the
85  * wait to not hang if there are no stopped or terminated processes, rather
86  * returning an error indication in this case (pid==0).  WUNTRACED
87  * indicates that the caller should receive status about untraced children
88  * which stop due to signals.  If children are stopped and a wait without
89  * this option is done, it is as though they were still running... nothing
90  * about them is returned.
91  */
92 #define	WNOHANG		1	/* dont hang in wait */
93 #define	WUNTRACED	2	/* tell about stopped, untraced children */
94 
95 #define	WIFSTOPPED(x)	(((union __wait*)&(x))->__w_stopval == _WSTOPPED)
96 #define	WIFSIGNALED(x)	(((union __wait*)&(x))->__w_stopval != _WSTOPPED && \
97 			((union __wait*)&(x))->__w_termsig != 0)
98 #define	WIFEXITED(x)	(((union __wait*)&(x))->__w_stopval != _WSTOPPED && \
99 			((union __wait*)&(x))->__w_termsig == 0)
100 #define	WEXITSTATUS(x)	(((union __wait*)&(x))->__w_retcode)
101 #define	WTERMSIG(x)	(((union __wait*)&(x))->__w_termsig)
102 #define	WSTOPSIG(x)	(((union __wait*)&(x))->__w_stopsig)
103 
104 #if	defined(KERNEL)  &&  !defined(_POSIX_SOURCE)
105 /*
106  * Arguments to wait4() system call, included here so it may be called by
107  * other routines in the kernel.
108  */
109 struct wait4_args {
110 	int pid;
111 	union wait *status;
112 	int options;
113 	struct rusage *rusage;
114 };
115 #endif	KERNEL
116 
117 #ifndef	KERNEL
118 #include <sys/stdtypes.h>
119 
120 pid_t	wait(/* int *loc */);
121 pid_t	waitpid(/* pid_t pid, int *loc, int opts */);
122 #endif
123 
124 #endif	/* !__sys_wait_h */
125