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 ?

Reply via email to