2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly, Alex Rønne Petersen
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
10 /* Copyright Sean Kelly 2005 - 2009.
11 * Distributed under the Boost Software License, Version 1.0.
12 * (See accompanying file LICENSE or copy at
13 * http://www.boost.org/LICENSE_1_0.txt)
15 module core
.sys
.posix
.sys
.wait;
17 import core
.sys
.posix
.config
;
18 public import core
.sys
.posix
.sys
.types
; // for id_t, pid_t
19 public import core
.sys
.posix
.signal
; // for siginfo_t (XSI)
20 //public import core.sys.posix.resource; // for rusage (XSI)
28 else version (WatchOS
)
32 extern (C
) nothrow @nogc:
49 enum __W_CONTINUED
= 0xFFFF;
59 enum _WSTOPPED
= 0x7F; // octal 0177
62 else version (FreeBSD
)
69 enum _WSTOPPED
= 0x7F; // octal 0177
70 enum __W_CONTINUED
= 0x13;
80 enum _WSTOPPED
= 0x7F; // octal 0177
83 else version (OpenBSD
)
90 enum _WSTOPPED
= 0x7F; // octal 0177
91 enum _WCONTINUED
= 0xFFFF; // octal 0177777
94 else version (DragonFlyBSD
)
101 enum _WSTOPPED
= 0x7F; // octal 0177
104 else version (Solaris
)
111 static assert(false, "Unsupported platform");
124 version (CRuntime_Glibc
)
130 extern (D
) int __WTERMSIG( int status
) { return status
& 0x7F; }
134 // NOTE: These macros assume __USE_MISC is not defined in the relevant
135 // C headers as the parameter definition there is different and
136 // much more complicated.
138 extern (D
) int WEXITSTATUS( int status
) { return ( status
& 0xFF00 ) >> 8; }
139 extern (D
) int WIFCONTINUED( int status
) { return status
== __W_CONTINUED
; }
140 extern (D
) bool WIFEXITED( int status
) { return __WTERMSIG( status
) == 0; }
141 extern (D
) bool WIFSIGNALED( int status
)
143 return ( cast(byte) ( ( status
& 0x7F ) + 1 ) >> 1 ) > 0;
145 extern (D
) bool WIFSTOPPED( int status
) { return ( status
& 0xFF ) == 0x7F; }
146 extern (D
) int WSTOPSIG( int status
) { return WEXITSTATUS( status
); }
147 extern (D
) int WTERMSIG( int status
) { return status
& 0x7F; }
149 else version (Darwin
)
153 extern (D
) int _WSTATUS(int status
) { return (status
& 0x7F); }
154 extern (D
) int WEXITSTATUS( int status
) { return (status
>> 8); }
155 extern (D
) int WIFCONTINUED( int status
) { return status
== 0x13; }
156 extern (D
) bool WIFEXITED( int status
) { return _WSTATUS(status
) == 0; }
157 extern (D
) bool WIFSIGNALED( int status
)
159 return _WSTATUS( status
) != _WSTOPPED
&& _WSTATUS( status
) != 0;
161 extern (D
) bool WIFSTOPPED( int status
) { return _WSTATUS( status
) == _WSTOPPED
; }
162 extern (D
) int WSTOPSIG( int status
) { return status
>> 8; }
163 extern (D
) int WTERMSIG( int status
) { return _WSTATUS( status
); }
165 else version (FreeBSD
)
169 extern (D
) int _WSTATUS(int status
) { return (status
& 0x7F); }
170 extern (D
) int WEXITSTATUS( int status
) { return (status
>> 8); }
171 extern (D
) int WIFCONTINUED( int status
) { return status
== 0x13; }
172 extern (D
) bool WIFEXITED( int status
) { return _WSTATUS(status
) == 0; }
173 extern (D
) bool WIFSIGNALED( int status
)
175 return _WSTATUS( status
) != _WSTOPPED
&& _WSTATUS( status
) != 0;
177 extern (D
) bool WIFSTOPPED( int status
) { return _WSTATUS( status
) == _WSTOPPED
; }
178 extern (D
) int WSTOPSIG( int status
) { return status
>> 8; }
179 extern (D
) int WTERMSIG( int status
) { return _WSTATUS( status
); }
181 else version (NetBSD
)
185 extern (D
) int _WSTATUS(int status
) { return (status
& 0x7F); }
186 extern (D
) int WEXITSTATUS( int status
) { return (status
>> 8); }
187 extern (D
) int WIFCONTINUED( int status
) { return status
== 0x13; }
188 extern (D
) bool WIFEXITED( int status
) { return _WSTATUS(status
) == 0; }
189 extern (D
) bool WIFSIGNALED( int status
)
191 return _WSTATUS( status
) != _WSTOPPED
&& _WSTATUS( status
) != 0;
193 extern (D
) bool WIFSTOPPED( int status
) { return _WSTATUS( status
) == _WSTOPPED
; }
194 extern (D
) int WSTOPSIG( int status
) { return status
>> 8; }
195 extern (D
) int WTERMSIG( int status
) { return _WSTATUS( status
); }
197 else version (OpenBSD
)
201 extern (D
) int _WSTATUS(int status
) { return (status
& 0x7F); }
202 extern (D
) int WEXITSTATUS(int status
) { return (status
>> 8) & 0xFF; }
203 extern (D
) int WIFCONTINUED(int status
) { return (status
& _WCONTINUED
) == _WCONTINUED
; }
204 extern (D
) bool WIFEXITED(int status
) { return _WSTATUS(status
) == 0; }
205 extern (D
) bool WIFSIGNALED(int status
)
207 return _WSTATUS(status
) != _WSTOPPED
&& _WSTATUS(status
) != 0;
209 extern (D
) bool WIFSTOPPED(int status
) { return (status
& 0xFF) == _WSTOPPED
; }
210 extern (D
) int WSTOPSIG(int status
) { return (status
>> 8) & 0xFF; }
211 extern (D
) int WTERMSIG(int status
) { return _WSTATUS(status
); }
213 else version (DragonFlyBSD
)
217 extern (D
) int _WSTATUS(int status
) { return (status
& 0x7F); }
218 extern (D
) int WEXITSTATUS( int status
) { return (status
>> 8); }
219 extern (D
) int WIFCONTINUED( int status
) { return status
== 0x13; }
220 extern (D
) bool WIFEXITED( int status
) { return _WSTATUS(status
) == 0; }
221 extern (D
) bool WIFSIGNALED( int status
)
223 return _WSTATUS( status
) != _WSTOPPED
&& _WSTATUS( status
) != 0;
225 extern (D
) bool WIFSTOPPED( int status
) { return _WSTATUS( status
) == _WSTOPPED
; }
226 extern (D
) int WSTOPSIG( int status
) { return status
>> 8; }
227 extern (D
) int WTERMSIG( int status
) { return _WSTATUS( status
); }
229 else version (Solaris
)
233 extern (D
) int WEXITSTATUS(int status
) { return (status
>> 8) & 0xff; }
234 extern (D
) int WIFCONTINUED(int status
) { return (status
& 0xffff) == 0xffff; }
235 extern (D
) bool WIFEXITED(int status
) { return (status
& 0xff) == 0; }
236 extern (D
) bool WIFSIGNALED(int status
) { return (status
& 0xff) > 0 && (status
& 0xff00) == 0; }
237 extern (D
) bool WIFSTOPPED(int status
) { return (status
& 0xff) == 0x7f && (status
& 0xff00) != 0; }
238 extern (D
) int WSTOPSIG(int status
) { return (status
>> 8) & 0x7f; }
239 extern (D
) int WTERMSIG(int status
) { return (status
& 0x7f); }
241 else version (CRuntime_Bionic
)
244 extern (D
) int WEXITSTATUS( int status
) { return ( status
& 0xFF00 ) >> 8; }
245 extern (D
) bool WIFEXITED( int status
) { return WTERMSIG(status
) == 0; }
246 extern (D
) bool WIFSIGNALED( int status
) { return WTERMSIG(status
+ 1) >= 2; }
247 extern (D
) bool WIFSTOPPED( int status
) { return WTERMSIG(status
) == 0x7F; }
248 extern (D
) int WSTOPSIG( int status
) { return WEXITSTATUS(status
); }
249 extern (D
) int WTERMSIG( int status
) { return status
& 0x7F; }
251 else version (CRuntime_Musl
)
254 extern (D
) int WEXITSTATUS( int status
) { return ( status
& 0xFF00 ) >> 8; }
255 extern (D
) int WIFCONTINUED( int status
) { return status
== 0xffff; }
256 extern (D
) bool WIFEXITED( int status
) { return WTERMSIG( status
) == 0; }
257 extern (D
) bool WIFSIGNALED( int status
) { return (status
&0xffff)-1U < 0xffU
; }
258 extern (D
) bool WIFSTOPPED( int status
) { return cast(short)(((status
&0xffff)*0x10001)>>8) > 0x7f00; }
259 extern (D
) int WTERMSIG( int status
) { return status
& 0x7F; }
260 alias WEXITSTATUS WSTOPSIG
;
262 else version (CRuntime_UClibc
)
268 extern (D
) int __WTERMSIG( int status
) { return status
& 0x7F; }
272 // NOTE: These macros assume __USE_BSD is not defined in the relevant
273 // C headers as the parameter definition there is different and
274 // much more complicated.
276 extern (D
) int WEXITSTATUS( int status
) { return ( status
& 0xFF00 ) >> 8; }
277 extern (D
) int WIFCONTINUED( int status
) { return status
== __W_CONTINUED
; }
278 extern (D
) bool WIFEXITED( int status
) { return __WTERMSIG( status
) == 0; }
279 extern (D
) bool WIFSIGNALED( int status
)
281 return ( cast(ulong) ( ( status
& 0xffff ) - 1U ) >> 1 ) < 0xffU
;
285 extern (D
) bool WIFSTOPPED( int status
) { return ( status
& 0xFF ) == 0x7F; }
289 extern (D
) bool WIFSTOPPED( int status
) { return ( status
& 0xFF ) == 0x7F && ( status
& 0xFF00 ); }
291 extern (D
) int WSTOPSIG( int status
) { return WEXITSTATUS( status
); }
292 extern (D
) int WTERMSIG( int status
) { return status
& 0x7F; }
296 static assert(false, "Unsupported platform");
301 pid_t waitpid(pid_t, int*, int);
305 pid_t
waitpid(pid_t
, int*, int);
329 enum WNOWAIT
= 0x01000000;
338 else version (Darwin
)
340 enum WEXITED
= 0x00000004;
341 enum WSTOPPED
= 0x00000008;
342 enum WCONTINUED
= 0x00000010;
343 enum WNOWAIT
= 0x00000020;
352 else version (FreeBSD
)
354 enum WSTOPPED
= WUNTRACED
;
380 else version (NetBSD
)
382 enum WSTOPPED
= WUNTRACED
;
383 //enum WCONTINUED = 4;
384 enum WNOWAIT
= 0x00010000;
386 else version (OpenBSD
)
389 enum WSTOPPED
= WUNTRACED
;
399 else version (DragonFlyBSD
)
401 enum WSTOPPED
= WUNTRACED
;
405 else version (Solaris
)
409 enum WSTOPPED
= WUNTRACED
;
415 P_PID
, /* A process identifier. */
416 P_PPID
, /* A parent process identifier. */
417 P_PGID
, /* A process group (job control group) */
419 P_SID
, /* A session identifier. */
420 P_CID
, /* A scheduling class identifier. */
421 P_UID
, /* A user identifier. */
422 P_GID
, /* A group identifier. */
423 P_ALL
, /* All processes. */
424 P_LWPID
, /* An LWP identifier. */
425 P_TASKID
, /* A task identifier. */
426 P_PROJID
, /* A project identifier. */
427 P_POOLID
, /* A pool identifier. */
428 P_ZONEID
, /* A zone identifier. */
429 P_CTID
, /* A (process) contract identifier. */
430 P_CPUID
, /* CPU identifier. */
431 P_PSETID
, /* Processor set identifier */
436 static assert(false, "Unsupported platform");
440 int waitid(idtype_t, id_t, siginfo_t*, int);
443 version (CRuntime_Glibc
)
445 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
447 else version (Darwin
)
449 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
451 else version (FreeBSD
)
453 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
455 else version (NetBSD
)
458 else version (OpenBSD
)
460 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
462 else version (DragonFlyBSD
)
465 else version (Solaris
)
467 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
469 else version (CRuntime_Bionic
)
471 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
473 else version (CRuntime_Musl
)
475 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
477 else version (CRuntime_UClibc
)
479 int waitid(idtype_t
, id_t
, siginfo_t
*, int);
483 static assert(false, "Unsupported platform");