Commit | Line | Data |
---|---|---|
a1330e13 BJ |
1 | /* |
2 | * This file holds definitions relevent to the wait system call. | |
3 | * Some of the options here are available only through the ``wait3'' | |
4 | * entry point; the old entry point with one argument has more fixed | |
5 | * semantics, never returning status of unstopped children, hanging until | |
6 | * a process terminates if any are outstanding, and never returns | |
7 | * detailed information about process resource utilization (<vtimes.h>). | |
8 | */ | |
9 | ||
10 | /* | |
11 | * Structure of the information in the first word returned by both | |
12 | * wait and wait3. If w_stopval==WSTOPPED, then the second structure | |
13 | * describes the information returned, else the first. See WUNTRACED below. | |
14 | */ | |
15 | union wait { | |
16 | int w_status; /* used in syscall */ | |
17 | /* | |
18 | * Terminated process status. | |
19 | */ | |
20 | struct { | |
21 | unsigned short w_Termsig:7; /* termination signal */ | |
22 | unsigned short w_Coredump:1; /* core dump indicator */ | |
23 | unsigned short w_Retcode:8; /* exit code if w_termsig==0 */ | |
24 | } w_T; | |
25 | /* | |
26 | * Stopped process status. Returned | |
27 | * only for traced children unless requested | |
28 | * with the WUNTRACED option bit. | |
29 | */ | |
30 | struct { | |
31 | unsigned short w_Stopval:8; /* == W_STOPPED if stopped */ | |
32 | unsigned short w_Stopsig:8; /* signal that stopped us */ | |
33 | } w_S; | |
34 | }; | |
35 | #define w_termsig w_T.w_Termsig | |
36 | #define w_coredump w_T.w_Coredump | |
37 | #define w_retcode w_T.w_Retcode | |
38 | #define w_stopval w_S.w_Stopval | |
39 | #define w_stopsig w_S.w_Stopsig | |
40 | ||
41 | ||
42 | #define WSTOPPED 0177 /* value of s.stopval if process is stopped */ | |
43 | ||
44 | /* | |
45 | * Option bits for the second argument of wait3. WNOHANG causes the | |
46 | * wait to not hang if there are no stopped or terminated processes, rather | |
47 | * returning an error indication in this case (pid==0). WUNTRACED | |
48 | * indicates that the caller should receive status about untraced children | |
49 | * which stop due to signals. If children are stopped and a wait without | |
50 | * this option is done, it is as though they were still running... nothing | |
51 | * about them is returned. | |
52 | */ | |
53 | #define WNOHANG 1 /* dont hang in wait */ | |
54 | #define WUNTRACED 2 /* tell about stopped, untraced children */ | |
55 | ||
56 | #define WIFSTOPPED(x) ((x).w_stopval == WSTOPPED) | |
57 | #define WIFSIGNALED(x) ((x).w_stopval != WSTOPPED && (x).w_termsig != 0) | |
58 | #define WIFEXITED(x) ((x).w_stopval != WSTOPPED && (x).w_termsig == 0) |