On Tue, 04 May 2010 08:55:36 -0500, Ellery Newcomer wrote: > On 05/04/2010 01:58 AM, Lars T. Kyllingstad wrote: >> std.process is currently undergoing a complete redesign, so the current >> situation should improve in the near future. :) >> >> -Lars > > That's good to hear. And since you're an expert in this stuff, does this > my code look alright? > > import std.typecons; > static import std.c.process; > import std.functional; > import std.stdio; > import std.string; > > alias Tuple!(ubyte, "status",ubyte, "term", ubyte, > "sig",bool,"signaled",bool, "stopped", bool,"continued",bool, > "coredumped") PID; > > PID toPID(int p){ > PID pid; > pid.status = cast(byte)((p & 0xff00) >> 8); pid.term = cast(byte)(p > & 0xff); > pid.sig = cast(byte)(p & 0x7f); > pid.signaled = pid.sig != 0 && pid.sig != 0x7f; pid.coredumped = > cast(bool)(p & 0x80); pid.stopped = pid.term == 0x7f; > pid.continued = p == 0xffff; > return pid; > }
Shouldn't 'term' and 'signaled' switch names? It looks to me like 'term' will be nonzero if the process receives any signal, while 'signaled' will be only be true if it is a terminating signal, and not if it is a stop signal. Otherwise it looks right, at least on Linux. But why not use the core.sys.posix.sys.wait.Wxxx() functions? Then it will automatically work on BSD and MacOS as well. > int fromPID(PID pid){ > if(pid.signaled) return pid.term; > return pid.status; > } > > alias compose!(toPID, std.c.process.system, toStringz) system_p; alias > compose!(fromPID, system_p) system; I didn't know about compose, that's nifty. :) -Lars