nginx-0.0.1-2004-01-09-00:02:06 import
diff --git a/src/os/unix/ngx_os.h b/src/os/unix/ngx_os.h
index 571bef7..4f59137 100644
--- a/src/os/unix/ngx_os.h
+++ b/src/os/unix/ngx_os.h
@@ -54,6 +54,7 @@
 extern ngx_int_t    ngx_reap;
 extern ngx_int_t    ngx_quit;
 extern ngx_int_t    ngx_terminate;
+extern ngx_int_t    ngx_pause;
 extern ngx_int_t    ngx_reconfigure;
 extern ngx_int_t    ngx_reopen;
 extern ngx_int_t    ngx_change_binary;
diff --git a/src/os/unix/ngx_posix_init.c b/src/os/unix/ngx_posix_init.c
index 769b133..374f60b 100644
--- a/src/os/unix/ngx_posix_init.c
+++ b/src/os/unix/ngx_posix_init.c
@@ -13,7 +13,6 @@
 typedef struct {
      int     signo;
      char   *signame;
-     char   *action;
      void  (*handler)(int signo);
 } ngx_signal_t;
 
@@ -21,39 +20,33 @@
 ngx_signal_t  signals[] = {
     { ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
       "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
-      ", reconfiguring",
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_REOPEN_SIGNAL),
       "SIG" ngx_value(NGX_REOPEN_SIGNAL),
-      ", reopen logs",
       ngx_signal_handler },
 
-    { ngx_signal_value(NGX_INTERRUPT_SIGNAL),
-      "SIG" ngx_value(NGX_INTERRUPT_SIGNAL),
-      ", exiting",
+    { ngx_signal_value(NGX_PAUSE_SIGNAL),
+      "SIG" ngx_value(NGX_PAUSE_SIGNAL),
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_TERMINATE_SIGNAL),
       "SIG" ngx_value(NGX_TERMINATE_SIGNAL),
-      ", exiting",
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
       "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
-      ", shutdowning",
       ngx_signal_handler },
 
     { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
       "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
-      ", changing binary",
       ngx_signal_handler },
 
-    { SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
+    { SIGCHLD, "SIGCHLD", ngx_signal_handler },
 
-    { SIGPIPE, "SIGPIPE, SIG_IGN", NULL, SIG_IGN },
+    { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN },
 
-    { 0, NULL, NULL, NULL }
+    { 0, NULL, NULL }
 };
 
 
@@ -98,6 +91,7 @@
 
 void ngx_signal_handler(int signo)
 {
+    char            *action;
     struct timeval   tv;
     ngx_err_t        err;
     ngx_signal_t    *sig;
@@ -113,37 +107,88 @@
     ngx_gettimeofday(&tv);
     ngx_time_update(tv.tv_sec);
 
+    action = "";
+
+    switch (ngx_process) {
+
+    case NGX_PROCESS_MASTER:
+    case NGX_PROCESS_QUITING:
+    case NGX_PROCESS_PAUSED:
+        switch (signo) {
+
+        case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
+            ngx_quit = 1;
+            action = ", shutdowning";
+            break;
+
+        case ngx_signal_value(NGX_TERMINATE_SIGNAL):
+            ngx_terminate = 1;
+            action = ", exiting";
+            break;
+
+        case ngx_signal_value(NGX_PAUSE_SIGNAL):
+            ngx_pause = 1;
+            action = ", pausing";
+            break;
+
+        case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
+            ngx_reconfigure = 1;
+            action = ", reconfiguring";
+            break;
+
+        case ngx_signal_value(NGX_REOPEN_SIGNAL):
+            ngx_reopen = 1;
+            action = ", reopen logs";
+            break;
+
+        case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
+            ngx_change_binary = 1;
+            action = ", changing binary";
+            break;
+
+        case SIGCHLD:
+            ngx_reap = 1;
+            break;
+        }
+
+        break;
+
+    case NGX_PROCESS_WORKER:
+        switch (signo) {
+
+        case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
+            ngx_quit = 1;
+            action = ", shutdowning";
+            break;
+
+        case ngx_signal_value(NGX_TERMINATE_SIGNAL):
+            ngx_terminate = 1;
+            action = ", exiting";
+            break;
+
+#if 0
+        case ngx_signal_value(NGX_REOPEN_SIGNAL):
+            ngx_reopen = 1;
+            action = ", reopen logs";
+            break;
+#endif
+
+        case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
+        case ngx_signal_value(NGX_REOPEN_SIGNAL):
+        case ngx_signal_value(NGX_PAUSE_SIGNAL):
+        case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
+            action = ", ignoring";
+            break;
+        }
+
+        break;
+    }
+
     ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0,
-                  "signal %d (%s) received%s",
-                  signo, sig->signame, sig->action);
+                  "signal %d (%s) received%s", signo, sig->signame, action);
 
-    switch (signo) {
-
-    case SIGCHLD:
-        ngx_reap = 1;
+    if (signo == SIGCHLD) {
         ngx_process_get_status();
-        break;
-
-    case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
-        ngx_quit = 1;
-        break;
-
-    case ngx_signal_value(NGX_TERMINATE_SIGNAL):
-    case ngx_signal_value(NGX_INTERRUPT_SIGNAL):
-        ngx_terminate = 1;
-        break;
-
-    case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
-        ngx_reconfigure = 1;
-        break;
-
-    case ngx_signal_value(NGX_REOPEN_SIGNAL):
-        ngx_reopen = 1;
-        break;
-
-    case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
-        ngx_change_binary = 1;
-        break;
     }
 
     ngx_set_errno(err);
diff --git a/src/os/unix/ngx_process.c b/src/os/unix/ngx_process.c
index 4d208c2..685b0d1 100644
--- a/src/os/unix/ngx_process.c
+++ b/src/os/unix/ngx_process.c
@@ -112,7 +112,7 @@
 }
 
 
-void ngx_signal_processes(ngx_cycle_t *cycle, ngx_int_t signal)
+void ngx_signal_processes(ngx_cycle_t *cycle, ngx_int_t signo)
 {
     ngx_uint_t  i;
 
@@ -122,24 +122,26 @@
             continue;
         }
 
+#if 0
         if (ngx_processes[i].exited) {
             if (i != --ngx_last_process) {
                 ngx_processes[i--] = ngx_processes[ngx_last_process];
             }
             continue;
         }
+#endif
 
         ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
                        "kill (" PID_T_FMT ", %d)" ,
-                       ngx_processes[i].pid, signal);
+                       ngx_processes[i].pid, signo);
 
-        if (kill(ngx_processes[i].pid, signal) == -1) {
+        if (kill(ngx_processes[i].pid, signo) == -1) {
             ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
-                          "kill(%d, %d) failed", ngx_processes[i].pid, signal);
+                          "kill(%d, %d) failed", ngx_processes[i].pid, signo);
             continue;
         }
 
-        if (signal != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
+        if (signo != ngx_signal_value(NGX_REOPEN_SIGNAL)) {
             ngx_processes[i].exiting = 1;
         }
     }
@@ -151,7 +153,7 @@
     ngx_uint_t  i;
 
     for (i = 0; i < ngx_last_process; i++) {
-        if (!ngx_processes[i].exited) {
+        if (ngx_processes[i].exiting || !ngx_processes[i].exited) {
             continue;
         }
 
@@ -212,11 +214,7 @@
         for (i = 0; i < ngx_last_process; i++) {
             if (ngx_processes[i].pid == pid) {
                 ngx_processes[i].status = status;
-
-                if (!ngx_processes[i].exiting) {
-                    ngx_processes[i].exited = 1;
-                }
-
+                ngx_processes[i].exited = 1;
                 process = ngx_processes[i].name;
                 break;
             }
diff --git a/src/os/unix/ngx_process.h b/src/os/unix/ngx_process.h
index e8a9784..d8727c3 100644
--- a/src/os/unix/ngx_process.h
+++ b/src/os/unix/ngx_process.h
@@ -29,10 +29,11 @@
 } ngx_exec_ctx_t;
 
 
-#define NGX_PROCESS_SINGLE       0
-#define NGX_PROCESS_MASTER       1
-#define NGX_PROCESS_WORKER       2
-#define NGX_PROCESS_MASTER_QUIT  3
+#define NGX_PROCESS_SINGLE   0
+#define NGX_PROCESS_MASTER   1
+#define NGX_PROCESS_WORKER   2
+#define NGX_PROCESS_QUITING  3
+#define NGX_PROCESS_PAUSED   4
 
 #define NGX_MAX_PROCESSES  1024
 
@@ -47,7 +48,7 @@
                             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);
-void ngx_signal_processes(ngx_cycle_t *cycle, ngx_int_t signal);
+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);