xref: /unit/src/nxt_signal_handlers.c (revision 1488:6976d36be926)
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) NGINX, Inc.
5  */
6 
7 #include <nxt_main.h>
8 #include <nxt_runtime.h>
9 #include <nxt_port.h>
10 #include <nxt_main_process.h>
11 #include <nxt_router.h>
12 
13 
14 static void nxt_signal_handler(nxt_task_t *task, void *obj, void *data);
15 static void nxt_signal_sigterm_handler(nxt_task_t *task, void *obj, void *data);
16 static void nxt_signal_sigquit_handler(nxt_task_t *task, void *obj, void *data);
17 
18 
19 const nxt_sig_event_t  nxt_process_signals[] = {
20     nxt_event_signal(SIGHUP,  nxt_signal_handler),
21     nxt_event_signal(SIGINT,  nxt_signal_sigterm_handler),
22     nxt_event_signal(SIGQUIT, nxt_signal_sigquit_handler),
23     nxt_event_signal(SIGTERM, nxt_signal_sigterm_handler),
24     nxt_event_signal(SIGCHLD, nxt_signal_handler),
25     nxt_event_signal(SIGUSR1, nxt_signal_handler),
26     nxt_event_signal(SIGUSR2, nxt_signal_handler),
27     nxt_event_signal_end,
28 };
29 
30 
31 static void
nxt_signal_handler(nxt_task_t * task,void * obj,void * data)32 nxt_signal_handler(nxt_task_t *task, void *obj, void *data)
33 {
34     nxt_trace(task, "signal signo:%d (%s) recevied, ignored",
35               (int) (uintptr_t) obj, data);
36 }
37 
38 
39 void
nxt_signal_quit_handler(nxt_task_t * task,nxt_port_recv_msg_t * msg)40 nxt_signal_quit_handler(nxt_task_t *task, nxt_port_recv_msg_t *msg)
41 {
42     nxt_process_quit(task, 0);
43 }
44 
45 
46 static void
nxt_signal_sigterm_handler(nxt_task_t * task,void * obj,void * data)47 nxt_signal_sigterm_handler(nxt_task_t *task, void *obj, void *data)
48 {
49     nxt_debug(task, "sigterm handler signo:%d (%s)",
50               (int) (uintptr_t) obj, data);
51 
52     /* A fast exit. */
53 
54     nxt_runtime_quit(task, 0);
55 }
56 
57 
58 static void
nxt_signal_sigquit_handler(nxt_task_t * task,void * obj,void * data)59 nxt_signal_sigquit_handler(nxt_task_t *task, void *obj, void *data)
60 {
61     nxt_debug(task, "sigquit handler signo:%d (%s)",
62               (int) (uintptr_t) obj, data);
63 
64     /* A graceful exit. */
65 
66     nxt_process_quit(task, 0);
67 }
68