system's "kill <pid>" signal

Basile B. via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Nov 5 00:52:53 PDT 2016


On Saturday, 5 November 2016 at 06:17:51 UTC, Basile B. wrote:
> On Saturday, 5 November 2016 at 02:24:00 UTC, Konstantin 
> Kutsevalov wrote:
>> Hi,
>>
>> is there a way to catch system signal of "kill" command or 
>> "shutdown"?
>
> During the Run-time:
> ====================
>
> You can register a signal callback, like in this sample (hit 
> CTRL+C once running in a terminal):
>
> import std.stdio;
> import core.sys.posix.signal;
>
> bool doQuit;
>
> extern(C) void handler(int num) nothrow @nogc @system
> {
>     printf("Caught signal %d\n",num);
>     doQuit = true;
> }
>
> void main(string[] args)
> {
>     signal(SIGINT, &handler);
>     while(true)
>     {
>         import core.thread;
>         Thread.sleep(dur!"msecs"(50));
>         if (doQuit)
>             break;
>     }
> }
>
>
> After termination:
> ==================
>
> if (tryWait(PID)[0] == true) then the value carried by 
> tryWait(PID)[1] will tell you if the process has exited because 
> of a signal whatever it's, e.g SIGKILL, SIGTERM, SIGINT, ...

3rd option, from my Windows times I remember that people tend to 
use launchers
to handle the real application, i.e a process that launches the 
main process. Then the launcher can have a thread that checks the 
PID (like in "After Term..."). If SIGKILL isn't handled by a 
signal() callback then this could be an option.

Do you have to check if a server crashes or something like that ?


More information about the Digitalmars-d-learn mailing list