digitalmars.D.learn - system's "kill <pid>" signal
- Konstantin Kutsevalov (5/5) Nov 04 2016 Hi,
- Nicholas Wilson (4/9) Nov 04 2016 have a look in std.process
- Basile B. (30/33) Nov 04 2016 During the Run-time:
- Basile B. (8/42) Nov 05 2016 3rd option, from my Windows times I remember that people tend to
- Konstantin Kutsevalov (3/12) Nov 06 2016 not a system crash. just a signal of sistems shutdown or process
- Konstantin Kutsevalov (3/16) Nov 06 2016 *of system
- Steven Schveighoffer (8/19) Nov 06 2016 You can catch signals, but some the OS does not let you catch.
- Konstantin Kutsevalov (2/17) Nov 06 2016 Thank you!
Hi, is there a way to catch system signal of "kill" command or "shutdown"? PS: are there some other ways also to send signals to running a D application?
Nov 04 2016
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"? PS: are there some other ways also to send signals to running a D application?have a look in std.process I don't think you can catch kill.
Nov 04 2016
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, ...
Nov 04 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: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 ?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, ...
Nov 05 2016
On Saturday, 5 November 2016 at 07:52:53 UTC, Basile B. wrote:On Saturday, 5 November 2016 at 06:17:51 UTC, Basile B. wrote: 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 ?not a system crash. just a signal of sistems shutdown or process kill.
Nov 06 2016
On Sunday, 6 November 2016 at 16:05:44 UTC, Konstantin Kutsevalov wrote:On Saturday, 5 November 2016 at 07:52:53 UTC, Basile B. wrote:*of systemOn Saturday, 5 November 2016 at 06:17:51 UTC, Basile B. wrote: 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 ?not a system crash. just a signal of sistems shutdown or process kill.
Nov 06 2016
On 11/6/16 11:05 AM, Konstantin Kutsevalov wrote:On Saturday, 5 November 2016 at 07:52:53 UTC, Basile B. wrote:You can catch signals, but some the OS does not let you catch. IIRC, Posix systems on shutdown first send a "TERM" signal (15) which is the default signal for the kill command line as well. If the process does not clean up within a certain timeout, then it is sent the "KILL" signal (9), which CANNOT be caught. What you want is to handle process cleanup on the TERM signal. -SteveOn Saturday, 5 November 2016 at 06:17:51 UTC, Basile B. wrote: 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 ?not a system crash. just a signal of sistems shutdown or process kill.
Nov 06 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:Thank you!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): 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, ...
Nov 06 2016