aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_process.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-04-21 20:25:49 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-04-21 20:25:49 +0000
commitc8e9f26a57cc387e4987a7740efed2de6832ac72 (patch)
tree013b1f09a9f842781853d2de576a921f8d588ac2 /src/os/unix/ngx_process.c
parent80ce3d4dd1d2bf6a4364a7d574d94c0b118380cc (diff)
downloadnginx-c8e9f26a57cc387e4987a7740efed2de6832ac72.tar.gz
nginx-c8e9f26a57cc387e4987a7740efed2de6832ac72.zip
implement "-s signal" option for Unix
Diffstat (limited to 'src/os/unix/ngx_process.c')
-rw-r--r--src/os/unix/ngx_process.c39
1 files changed, 33 insertions, 6 deletions
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index 18b2601af..7446c138b 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -13,6 +13,7 @@
typedef struct {
int signo;
char *signame;
+ char *name;
void (*handler)(int signo);
} ngx_signal_t;
@@ -36,39 +37,45 @@ ngx_process_t ngx_processes[NGX_MAX_PROCESSES];
ngx_signal_t signals[] = {
{ ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
"SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
+ "reload",
ngx_signal_handler },
{ ngx_signal_value(NGX_REOPEN_SIGNAL),
"SIG" ngx_value(NGX_REOPEN_SIGNAL),
+ "reopen",
ngx_signal_handler },
{ ngx_signal_value(NGX_NOACCEPT_SIGNAL),
"SIG" ngx_value(NGX_NOACCEPT_SIGNAL),
+ "",
ngx_signal_handler },
{ ngx_signal_value(NGX_TERMINATE_SIGNAL),
"SIG" ngx_value(NGX_TERMINATE_SIGNAL),
+ "stop",
ngx_signal_handler },
{ ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
"SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
+ "quit",
ngx_signal_handler },
{ ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
"SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
+ "",
ngx_signal_handler },
- { SIGALRM, "SIGALRM", ngx_signal_handler },
+ { SIGALRM, "SIGALRM", "", ngx_signal_handler },
- { SIGINT, "SIGINT", ngx_signal_handler },
+ { SIGINT, "SIGINT", "", ngx_signal_handler },
- { SIGIO, "SIGIO", ngx_signal_handler },
+ { SIGIO, "SIGIO", "", ngx_signal_handler },
- { SIGCHLD, "SIGCHLD", ngx_signal_handler },
+ { SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
- { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN },
+ { SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN },
- { 0, NULL, NULL }
+ { 0, NULL, "", NULL }
};
@@ -540,3 +547,23 @@ ngx_debug_point(void)
ngx_abort();
}
}
+
+
+ngx_int_t
+ngx_os_signal_process(ngx_cycle_t *cycle, char *name, ngx_int_t pid)
+{
+ ngx_signal_t *sig;
+
+ for (sig = signals; sig->signo != 0; sig++) {
+ if (ngx_strcmp(name, sig->name) == 0) {
+ if (kill(pid, sig->signo) != -1) {
+ return 0;
+ }
+
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ "kill(%P, %d) failed", pid, sig->signo);
+ }
+ }
+
+ return 1;
+}