aboutsummaryrefslogtreecommitdiff
path: root/src/os/unix/ngx_process.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2017-04-20 13:58:16 +0300
committerIgor Sysoev <igor@sysoev.ru>2017-04-20 13:58:16 +0300
commit30e26a8c57fab4b7d95eacc7fd5c0bae23364529 (patch)
treec50464a202b4c54e031e2445b520601620bcee6c /src/os/unix/ngx_process.c
parentcb7427d86ccb0483538b7d18a991e1df272167cc (diff)
downloadnginx-30e26a8c57fab4b7d95eacc7fd5c0bae23364529.tar.gz
nginx-30e26a8c57fab4b7d95eacc7fd5c0bae23364529.zip
Core: signal sender pid logging.
Diffstat (limited to 'src/os/unix/ngx_process.c')
-rw-r--r--src/os/unix/ngx_process.c32
1 files changed, 24 insertions, 8 deletions
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index 2d37e21d4..dd50b5ca1 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -15,13 +15,13 @@ typedef struct {
int signo;
char *signame;
char *name;
- void (*handler)(int signo);
+ void (*handler)(int signo, siginfo_t *siginfo, void *ucontext);
} ngx_signal_t;
static void ngx_execute_proc(ngx_cycle_t *cycle, void *data);
-static void ngx_signal_handler(int signo);
+static void ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext);
static void ngx_process_get_status(void);
static void ngx_unlock_mutexes(ngx_pid_t pid);
@@ -75,9 +75,9 @@ ngx_signal_t signals[] = {
{ SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
- { SIGSYS, "SIGSYS, SIG_IGN", "", SIG_IGN },
+ { SIGSYS, "SIGSYS, SIG_IGN", "", NULL },
- { SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN },
+ { SIGPIPE, "SIGPIPE, SIG_IGN", "", NULL },
{ 0, NULL, "", NULL }
};
@@ -288,7 +288,15 @@ ngx_init_signals(ngx_log_t *log)
for (sig = signals; sig->signo != 0; sig++) {
ngx_memzero(&sa, sizeof(struct sigaction));
- sa.sa_handler = sig->handler;
+
+ if (sig->handler) {
+ sa.sa_sigaction = sig->handler;
+ sa.sa_flags = SA_SIGINFO;
+
+ } else {
+ sa.sa_handler = SIG_IGN;
+ }
+
sigemptyset(&sa.sa_mask);
if (sigaction(sig->signo, &sa, NULL) == -1) {
#if (NGX_VALGRIND)
@@ -307,7 +315,7 @@ ngx_init_signals(ngx_log_t *log)
static void
-ngx_signal_handler(int signo)
+ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext)
{
char *action;
ngx_int_t ignore;
@@ -431,8 +439,16 @@ ngx_signal_handler(int signo)
break;
}
- ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
- "signal %d (%s) received%s", signo, sig->signame, action);
+ if (siginfo && siginfo->si_pid) {
+ ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
+ "signal %d (%s) received from %P%s",
+ signo, sig->signame, siginfo->si_pid, action);
+
+ } else {
+ ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
+ "signal %d (%s) received%s",
+ signo, sig->signame, action);
+ }
if (ignore) {
ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, 0,