diff --git a/src/core/nginx.c b/src/core/nginx.c
index b3d29d2..56503a6 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -16,6 +16,7 @@
 
 typedef struct {
      ngx_file_t    pid;
+     char         *name;
      char *const  *argv;
 } ngx_master_ctx_t;
 
@@ -23,7 +24,7 @@
 static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx);
 static void ngx_worker_process_cycle(ngx_cycle_t *cycle, void *data);
 static ngx_int_t ngx_add_inherited_sockets(ngx_cycle_t *cycle, char **envp);
-static void ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
+static ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv);
 static ngx_int_t ngx_core_module_init(ngx_cycle_t *cycle);
 
 
@@ -75,8 +76,9 @@
 u_int ngx_connection_counter;
 
 ngx_int_t  ngx_process;
-ngx_int_t  ngx_inherited;
+ngx_pid_t  ngx_new_binary;
 
+ngx_int_t  ngx_inherited;
 ngx_int_t  ngx_signal;
 ngx_int_t  ngx_reap;
 ngx_int_t  ngx_terminate;
@@ -201,6 +203,7 @@
     len = ngx_snprintf(pid, /* STUB */ 10, PID_T_FMT, ngx_getpid());
     ngx_memzero(&ctx.pid, sizeof(ngx_file_t));
     ctx.pid.name = ngx_inherited ? ccf->newpid : ccf->pid;
+    ctx.name = ccf->pid.data;
 
     ctx.pid.fd = ngx_open_file(ctx.pid.name.data, NGX_FILE_RDWR,
                                NGX_FILE_CREATE_OR_OPEN);
@@ -230,13 +233,16 @@
 }
 
 
+/* TODO: broken single process */
+
 static void ngx_master_process_cycle(ngx_cycle_t *cycle, ngx_master_ctx_t *ctx)
 {
-    int             signo;
-    ngx_msec_t      delay;
-    struct timeval  tv;
-    ngx_uint_t      i, live, mark;
-    sigset_t        set, wset;
+    int              signo;
+    char            *name;
+    sigset_t         set, wset;
+    struct timeval   tv;
+    ngx_uint_t       i, live, mark;
+    ngx_msec_t       delay;
 
     delay = 125;
 
@@ -257,6 +263,7 @@
     }
 
     ngx_signal = 0;
+    ngx_new_binary = 0;
     signo = 0;
     mark = 1;
 
@@ -266,6 +273,7 @@
         if (ngx_process == NGX_PROCESS_MASTER) {
             ngx_spawn_process(cycle, ngx_worker_process_cycle, NULL,
                               "worker process", NGX_PROCESS_RESPAWN);
+            mark = 1;
 
         } else {
             ngx_init_temp_number();
@@ -280,7 +288,7 @@
             }
         }
 
-        /* a cycle with the same configuration */
+        /* a cycle with the same configuration because a new one is invalid */
 
         for ( ;; ) {
 
@@ -290,8 +298,8 @@
 
                 if (ngx_process == NGX_PROCESS_MASTER) {
                     if (signo) {
-                        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
-                                       "signal cycle");
+                        ngx_log_debug2(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                                       "signal cycle: %d, %d", signo, mark);
 
                         if (sigprocmask(SIG_UNBLOCK, &set, NULL) == -1) {
                             ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
@@ -330,14 +338,19 @@
                         ngx_signal = 0;
 
                     } else {
+                        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                                       "sigsuspend");
+
                         sigsuspend(&wset);
 
                         ngx_gettimeofday(&tv);
                         ngx_time_update(tv.tv_sec);
+
+                        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                                       "wake up");
                     }
 
-                /* TODO: broken */
-                } else if (ngx_process == NGX_PROCESS_SINGLE) {
+                } else { /* NGX_PROCESS_SINGLE */
                     ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
                                    "worker cycle");
 
@@ -345,8 +358,12 @@
                 }
 
                 if (ngx_reap) {
+                    ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                                   "reap childs");
+
                     live = 0;
                     for (i = 0; i < ngx_last_process; i++) {
+
                         if (ngx_processes[i].exiting
                             && !ngx_processes[i].exited)
                         {
@@ -354,22 +371,33 @@
                             continue;
                         }
 
-                        if (i != --ngx_last_process) {
-                            ngx_processes[i--] =
+                        if (ngx_processes[i].exited) {
+                            if (ngx_processes[i].pid == ngx_new_binary) {
+                                ngx_new_binary = 0;
+                            }
+
+                            if (i != --ngx_last_process) {
+                                ngx_processes[i--] =
                                                ngx_processes[ngx_last_process];
+                            }
                         }
                     }
 
                     if (!live) {
                         if (ngx_terminate || ngx_quit) {
-                            if (ngx_delete_file(ctx->pid.name.data)
-                                                             == NGX_FILE_ERROR)
-                            {
+
+                            if (ngx_inherited && getppid() > 1) {
+                                name = ctx->pid.name.data;
+
+                            } else {
+                                name = ctx->name;
+                            }
+
+                            if (ngx_delete_file(name) == NGX_FILE_ERROR) {
                                 ngx_log_error(NGX_LOG_ALERT, cycle->log,
                                               ngx_errno,
                                               ngx_delete_file_n
-                                              " \"%s\" failed",
-                                              ctx->pid.name.data);
+                                              " \"%s\" failed", name);
                             }
 
                             ngx_log_error(NGX_LOG_INFO, cycle->log, 0, "exit");
@@ -377,6 +405,7 @@
 
                         } else {
                             signo = 0;
+                            mark = 0;
                         }
                     }
                 }
@@ -386,14 +415,24 @@
                         signo = SIGKILL;
                     } else {
                         signo = ngx_signal_value(NGX_TERMINATE_SIGNAL);
+                        if (mark == 0) {
+                            mark = 1;
+                        }
                     }
+                    ngx_log_debug1(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                                   "mark: %d", mark);
 
                 } else if (ngx_quit) {
                     signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
+                    if (mark == 0) {
+                        mark = 1;
+                    }
 
                 } else {
 
                     if (ngx_reap) {
+                        ngx_log_debug0(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
+                                       "respawn processes");
                         ngx_respawn_processes(cycle);
                     }
 
@@ -408,7 +447,7 @@
                         ngx_change_binary = 0;
                         ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
                                       "changing binary");
-                        ngx_exec_new_binary(cycle, ctx->argv);
+                        ngx_new_binary = ngx_exec_new_binary(cycle, ctx->argv);
                     }
 
                     if (ngx_reconfigure) {
@@ -419,9 +458,12 @@
                     }
 
                     if (ngx_reopen) {
-                        mark = 1;
                         ngx_reopen = 0;
+
+                        /* STUB */
+                        mark = 1;
                         signo = ngx_signal_value(NGX_SHUTDOWN_SIGNAL);
+
                         ngx_log_error(NGX_LOG_INFO, cycle->log, 0,
                                       "reopening logs");
                         ngx_reopen_files(cycle);
@@ -431,8 +473,17 @@
                 if (signo) {
                     if (mark == 1) {
                         for (i = 0; i < ngx_last_process; i++) {
+                            ngx_log_debug1(NGX_LOG_DEBUG_EVENT,
+                                           cycle->log, 0,
+                                           "proc " PID_T_FMT,
+                                           ngx_processes[i].pid);
+
                             if (!ngx_processes[i].detached) {
                                 ngx_processes[i].signal = 1;
+                                ngx_log_debug1(NGX_LOG_DEBUG_EVENT,
+                                               cycle->log, 0,
+                                               "mark " PID_T_FMT,
+                                               ngx_processes[i].pid);
                             }
                         }
                         mark = -1;
@@ -446,6 +497,11 @@
                     ngx_reap = 0;
                 }
 
+                /* STUB */
+                if (ngx_reopen) {
+                    break;
+                }
+
                 if (ngx_reconfigure) {
                     break;
                 }
@@ -602,10 +658,11 @@
 }
 
 
-static void ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
+static ngx_pid_t ngx_exec_new_binary(ngx_cycle_t *cycle, char *const *argv)
 {
     char             *env[2], *var, *p;
     ngx_int_t         i;
+    ngx_pid_t         pid;
     ngx_exec_ctx_t    ctx;
     ngx_listening_t  *ls;
 
@@ -628,9 +685,11 @@
     env[1] = NULL;
     ctx.envp = (char *const *) &env;
 
-    ngx_exec(cycle, &ctx);
+    pid = ngx_exec(cycle, &ctx);
 
     ngx_free(var);
+
+    return pid;
 }
 
 
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);
