diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/nginx.c | 1 | ||||
-rw-r--r-- | src/os/unix/ngx_daemon.c | 1 | ||||
-rw-r--r-- | src/os/unix/ngx_process.c | 7 | ||||
-rw-r--r-- | src/os/unix/ngx_process.h | 2 | ||||
-rw-r--r-- | src/os/unix/ngx_process_cycle.c | 1 | ||||
-rw-r--r-- | src/os/win32/ngx_process.h | 2 | ||||
-rw-r--r-- | src/os/win32/ngx_process_cycle.c | 1 |
7 files changed, 12 insertions, 3 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c index c3a29cc40..3894c29fa 100644 --- a/src/core/nginx.c +++ b/src/core/nginx.c @@ -228,6 +228,7 @@ main(int argc, char *const *argv) #endif ngx_pid = ngx_getpid(); + ngx_parent = ngx_getppid(); log = ngx_log_init(ngx_prefix); if (log == NULL) { diff --git a/src/os/unix/ngx_daemon.c b/src/os/unix/ngx_daemon.c index ab6721108..385c49b6c 100644 --- a/src/os/unix/ngx_daemon.c +++ b/src/os/unix/ngx_daemon.c @@ -26,6 +26,7 @@ ngx_daemon(ngx_log_t *log) exit(0); } + ngx_parent = ngx_pid; ngx_pid = ngx_getpid(); if (setsid() == -1) { diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c index 993c032ae..15680237a 100644 --- a/src/os/unix/ngx_process.c +++ b/src/os/unix/ngx_process.c @@ -194,6 +194,7 @@ ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, return NGX_INVALID_PID; case 0: + ngx_parent = ngx_pid; ngx_pid = ngx_getpid(); proc(cycle, data); break; @@ -371,12 +372,12 @@ ngx_signal_handler(int signo, siginfo_t *siginfo, void *ucontext) break; case ngx_signal_value(NGX_CHANGEBIN_SIGNAL): - if (getppid() > 1 || ngx_new_binary > 0) { + if (ngx_getppid() == ngx_parent || ngx_new_binary > 0) { /* * Ignore the signal in the new binary if its parent is - * not the init process, i.e. the old binary's process - * is still running. Or ignore the signal in the old binary's + * not changed, i.e. the old binary's process is still + * running. Or ignore the signal in the old binary's * process if the new binary's process is already running. */ diff --git a/src/os/unix/ngx_process.h b/src/os/unix/ngx_process.h index 7b5e8c0c2..3986639b4 100644 --- a/src/os/unix/ngx_process.h +++ b/src/os/unix/ngx_process.h @@ -54,6 +54,7 @@ typedef struct { #define ngx_getpid getpid +#define ngx_getppid getppid #ifndef ngx_log_pid #define ngx_log_pid ngx_pid @@ -79,6 +80,7 @@ extern char **ngx_argv; extern char **ngx_os_argv; extern ngx_pid_t ngx_pid; +extern ngx_pid_t ngx_parent; extern ngx_socket_t ngx_channel; extern ngx_int_t ngx_process_slot; extern ngx_int_t ngx_last_process; diff --git a/src/os/unix/ngx_process_cycle.c b/src/os/unix/ngx_process_cycle.c index 1710ea812..a20a515c7 100644 --- a/src/os/unix/ngx_process_cycle.c +++ b/src/os/unix/ngx_process_cycle.c @@ -31,6 +31,7 @@ static void ngx_cache_loader_process_handler(ngx_event_t *ev); ngx_uint_t ngx_process; ngx_uint_t ngx_worker; ngx_pid_t ngx_pid; +ngx_pid_t ngx_parent; sig_atomic_t ngx_reap; sig_atomic_t ngx_sigio; diff --git a/src/os/win32/ngx_process.h b/src/os/win32/ngx_process.h index a6a5aa29f..7ec4cd92c 100644 --- a/src/os/win32/ngx_process.h +++ b/src/os/win32/ngx_process.h @@ -14,6 +14,7 @@ typedef DWORD ngx_pid_t; #define ngx_getpid GetCurrentProcessId +#define ngx_getppid() 0 #define ngx_log_pid ngx_pid @@ -73,6 +74,7 @@ extern ngx_int_t ngx_last_process; extern ngx_process_t ngx_processes[NGX_MAX_PROCESSES]; extern ngx_pid_t ngx_pid; +extern ngx_pid_t ngx_parent; #endif /* _NGX_PROCESS_H_INCLUDED_ */ diff --git a/src/os/win32/ngx_process_cycle.c b/src/os/win32/ngx_process_cycle.c index 293b967ec..3aea874e0 100644 --- a/src/os/win32/ngx_process_cycle.c +++ b/src/os/win32/ngx_process_cycle.c @@ -31,6 +31,7 @@ static ngx_thread_value_t __stdcall ngx_cache_loader_thread(void *data); ngx_uint_t ngx_process; ngx_uint_t ngx_worker; ngx_pid_t ngx_pid; +ngx_pid_t ngx_parent; ngx_uint_t ngx_inherited; ngx_pid_t ngx_new_binary; |