segfaults
Ellery Newcomer
ellery-newcomer at utulsa.edu
Tue May 4 06:55:36 PDT 2010
On 05/04/2010 01:58 AM, Lars T. Kyllingstad wrote:
>
> In your case the segfault would cause SIGSEGV (signal 11) to be sent to
> the process, and the the above test would print "Process terminated by
> signal 11".
>
> See "man wait" for more info.
That's where I got my info (or rather /usr/include/bits/waitstatus.h)
>
>
> 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;
}
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;
More information about the Digitalmars-d-learn
mailing list