segfaults

Graham Fawcett fawcett at uwindsor.ca
Tue May 4 07:51:27 PDT 2010


On Tue, 04 May 2010 08:55:36 -0500, Ellery Newcomer wrote:

> 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;


Thanks for posting this. Just curious -- why did you choose to model PID 
as a tuple instead of a struct? I'm not clear on what the tradeoffs are.

Best,
Graham


More information about the Digitalmars-d-learn mailing list