diff --git a/src/os/unix/ngx_os.h b/src/os/unix/ngx_os.h
index 8d9a6de..1616612 100644
--- a/src/os/unix/ngx_os.h
+++ b/src/os/unix/ngx_os.h
@@ -50,7 +50,9 @@
 
 
 extern ngx_int_t    ngx_process;
+extern ngx_pid_t    ngx_new_binary;
 
+extern ngx_int_t    ngx_inherited;
 extern ngx_int_t    ngx_signal;
 extern ngx_int_t    ngx_reap;
 extern ngx_int_t    ngx_quit;
diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c
index d5f28d0..b23dc31 100644
--- a/src/os/unix/ngx_posix_init.c
+++ b/src/os/unix/ngx_posix_init.c
@@ -42,6 +42,8 @@
       "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
       ngx_signal_handler },
 
+    { SIGINT, "SIGINT", ngx_signal_handler },
+
     { SIGCHLD, "SIGCHLD", ngx_signal_handler },
 
     { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN },
@@ -93,10 +95,12 @@
 {
     char            *action;
     struct timeval   tv;
+    ngx_int_t        ignore;
     ngx_err_t        err;
     ngx_signal_t    *sig;
 
     ngx_signal = 1;
+    ignore = 0;
 
     err = ngx_errno;
 
@@ -138,11 +142,31 @@
             break;
 
         case ngx_signal_value(NGX_REOPEN_SIGNAL):
-            ngx_reopen = 1;
-            action = ", reopen logs";
-            break;
+            if (ngx_noaccept) {
+                action = ", ignoring";
+
+            } else {
+                ngx_reopen = 1;
+                action = ", reopen logs";
+                break;
+            }
 
         case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
+            if ((ngx_inherited && getppid() > 1)
+                || (!ngx_inherited && 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 ingore the signal in the old binary's
+                 * process if the new binary's process is already running.
+                 */
+
+                action = ", ignoring";
+                ignore = 1;
+                break;
+            }
+
             ngx_change_binary = 1;
             action = ", changing binary";
             break;
@@ -189,6 +213,13 @@
     ngx_log_error(NGX_LOG_INFO, 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,
+                      "the changing binary signal is ignored: "
+                      "you should shutdown or terminate "
+                      "before either old or new binary's process");
+    }
+
     if (signo == SIGCHLD) {
         ngx_process_get_status();
     }
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index 4a80257..f591383 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -85,17 +85,10 @@
 }
 
 
-ngx_int_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
+ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
 {
-    if (ngx_spawn_process(cycle, ngx_exec_proc, ctx, ctx->name,
-                                            NGX_PROCESS_DETACHED) == NGX_ERROR)
-    {
-        ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
-                      "can not spawn %s", ctx->name);
-        return NGX_ERROR;
-    }
-
-    return NGX_OK;
+    return ngx_spawn_process(cycle, ngx_exec_proc, ctx, ctx->name,
+                             NGX_PROCESS_DETACHED);
 }
 
 
@@ -154,6 +147,9 @@
     ngx_uint_t  i;
 
     for (i = 0; i < ngx_last_process; i++) {
+        ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
+                       "proc table " PID_T_FMT, ngx_processes[i].pid);
+
         if (ngx_processes[i].exiting || !ngx_processes[i].exited) {
             continue;
         }
diff --git a/src/os/unix/ngx_process.h b/src/os/unix/ngx_process.h
index 1eb545b..5b56509 100644
--- a/src/os/unix/ngx_process.h
+++ b/src/os/unix/ngx_process.h
@@ -46,7 +46,7 @@
 ngx_pid_t ngx_spawn_process(ngx_cycle_t *cycle,
                             ngx_spawn_proc_pt proc, void *data,
                             char *name, ngx_int_t respawn);
-ngx_int_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx);
+ngx_pid_t ngx_exec(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx);
 void ngx_signal_processes(ngx_cycle_t *cycle, ngx_int_t signo);
 void ngx_respawn_processes(ngx_cycle_t *cycle);
 void ngx_process_get_status(void);
