annotate src/os/unix/ngx_process.c @ 391:1d9bef53cd8e

Range filter: late_ranges functionality. Add one more filtering point after postpone filter. This allows to serve range capable replies with subrequests. It's not as efficient as range filtering for static data (i.e. doesn't save us from reading data from disk if some filter needs them in memory), but it may save some network bandwidth for us and for our users.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 21 Jul 2008 05:33:01 +0400
parents 6639b93e81b2
children 33394d1255b0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10 #include <ngx_channel.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
13 typedef struct {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
14 int signo;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
15 char *signame;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
16 void (*handler)(int signo);
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
17 } ngx_signal_t;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
18
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
19
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
20
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 static void ngx_execute_proc(ngx_cycle_t *cycle, void *data);
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
22 static void ngx_signal_handler(int signo);
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
23 static void ngx_process_get_status(void);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
25
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
26 int ngx_argc;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
27 char **ngx_argv;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
28 char **ngx_os_argv;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
29
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
30 ngx_int_t ngx_process_slot;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
31 ngx_socket_t ngx_channel;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
32 ngx_int_t ngx_last_process;
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
33 ngx_process_t ngx_processes[NGX_MAX_PROCESSES];
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
36 ngx_signal_t signals[] = {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
37 { ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
38 "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
39 ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
40
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
41 { ngx_signal_value(NGX_REOPEN_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
42 "SIG" ngx_value(NGX_REOPEN_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
43 ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
44
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
45 { ngx_signal_value(NGX_NOACCEPT_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
46 "SIG" ngx_value(NGX_NOACCEPT_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
47 ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
48
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
49 { ngx_signal_value(NGX_TERMINATE_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
50 "SIG" ngx_value(NGX_TERMINATE_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
51 ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
52
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
53 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
54 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
55 ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
56
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
57 { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
58 "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
59 ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
60
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
61 { SIGALRM, "SIGALRM", ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
62
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
63 { SIGINT, "SIGINT", ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
64
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
65 { SIGIO, "SIGIO", ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
66
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
67 { SIGCHLD, "SIGCHLD", ngx_signal_handler },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
68
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
69 { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN },
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
70
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
71 { 0, NULL, NULL }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
72 };
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
73
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
74
64
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
75 ngx_pid_t
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
76 ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data,
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
77 char *name, ngx_int_t respawn)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 u_long on;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 ngx_pid_t pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81 ngx_int_t s;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83 if (respawn >= 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 s = respawn;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 } else {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87 for (s = 0; s < ngx_last_process; s++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88 if (ngx_processes[s].pid == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93 if (s == NGX_MAX_PROCESSES) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 "no more than %d processes can be spawned",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96 NGX_MAX_PROCESSES);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
97 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102 if (respawn != NGX_PROCESS_DETACHED) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
103
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104 /* Solaris 9 still has no AF_LOCAL */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
105
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
106 if (socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel) == -1)
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
107 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109 "socketpair() failed while spawning \"%s\"", name);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
110 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
111 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
114 "channel %d:%d",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 ngx_processes[s].channel[0],
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116 ngx_processes[s].channel[1]);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118 if (ngx_nonblocking(ngx_processes[s].channel[0]) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
119 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120 ngx_nonblocking_n " failed while spawning \"%s\"",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121 name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
123 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
126 if (ngx_nonblocking(ngx_processes[s].channel[1]) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
128 ngx_nonblocking_n " failed while spawning \"%s\"",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
129 name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
131 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
133
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
134 on = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
135 if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
136 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137 "ioctl(FIOASYNC) failed while spawning \"%s\"", name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
139 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142 if (fcntl(ngx_processes[s].channel[0], F_SETOWN, ngx_pid) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 "fcntl(F_SETOWN) failed while spawning \"%s\"", name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
146 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
147 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
148
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
149 if (fcntl(ngx_processes[s].channel[0], F_SETFD, FD_CLOEXEC) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
150 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
151 "fcntl(FD_CLOEXEC) failed while spawning \"%s\"",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
152 name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
153 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
154 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
155 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
156
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
157 if (fcntl(ngx_processes[s].channel[1], F_SETFD, FD_CLOEXEC) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
158 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159 "fcntl(FD_CLOEXEC) failed while spawning \"%s\"",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
160 name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
162 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
165 ngx_channel = ngx_processes[s].channel[1];
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
166
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
167 } else {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
168 ngx_processes[s].channel[0] = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
169 ngx_processes[s].channel[1] = -1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
170 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
171
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
172 ngx_process_slot = s;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
173
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
174
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
175 pid = fork();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
176
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
177 switch (pid) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
178
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
179 case -1:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
180 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
181 "fork() failed while spawning \"%s\"", name);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
182 ngx_close_channel(ngx_processes[s].channel, cycle->log);
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 88
diff changeset
183 return NGX_INVALID_PID;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
184
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
185 case 0:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
186 ngx_pid = ngx_getpid();
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
187 proc(cycle, data);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
188 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
189
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
190 default:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
191 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
192 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
193
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
194 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start %s %P", name, pid);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
195
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
196 ngx_processes[s].pid = pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
197 ngx_processes[s].exited = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
198
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
199 if (respawn >= 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
200 return pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
201 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
202
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
203 ngx_processes[s].proc = proc;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
204 ngx_processes[s].data = data;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
205 ngx_processes[s].name = name;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
206 ngx_processes[s].exiting = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
207
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
208 switch (respawn) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
209
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
210 case NGX_PROCESS_RESPAWN:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
211 ngx_processes[s].respawn = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
212 ngx_processes[s].just_respawn = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
213 ngx_processes[s].detached = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
214 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
215
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
216 case NGX_PROCESS_JUST_RESPAWN:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
217 ngx_processes[s].respawn = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
218 ngx_processes[s].just_respawn = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
219 ngx_processes[s].detached = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
220 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
221
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
222 case NGX_PROCESS_DETACHED:
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
223 ngx_processes[s].respawn = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
224 ngx_processes[s].just_respawn = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225 ngx_processes[s].detached = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
226 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
227 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
228
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
229 if (s == ngx_last_process) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
230 ngx_last_process++;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
231 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
232
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
233 return pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
234 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
235
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
236
64
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
237 ngx_pid_t
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
238 ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
239 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
240 return ngx_spawn_process(cycle, ngx_execute_proc, ctx, ctx->name,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
241 NGX_PROCESS_DETACHED);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
242 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
243
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
244
64
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
245 static void
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
246 ngx_execute_proc(ngx_cycle_t *cycle, void *data)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
247 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
248 ngx_exec_ctx_t *ctx = data;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
249
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
250 if (execve(ctx->path, ctx->argv, ctx->envp) == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
251 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
252 "execve() failed while executing %s \"%s\"",
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
253 ctx->name, ctx->path);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
254 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
255
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
256 exit(1);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
257 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
258
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
259
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
260 ngx_int_t
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
261 ngx_init_signals(ngx_log_t *log)
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
262 {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
263 ngx_signal_t *sig;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
264 struct sigaction sa;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
265
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
266 for (sig = signals; sig->signo != 0; sig++) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
267 ngx_memzero(&sa, sizeof(struct sigaction));
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
268 sa.sa_handler = sig->handler;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
269 sigemptyset(&sa.sa_mask);
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
270 if (sigaction(sig->signo, &sa, NULL) == -1) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
271 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
272 "sigaction(%s) failed", sig->signame);
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
273 return NGX_ERROR;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
274 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
275 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
276
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
277 return NGX_OK;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
278 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
279
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
280
64
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
281 void
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
282 ngx_signal_handler(int signo)
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
283 {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
284 char *action;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
285 ngx_int_t ignore;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
286 ngx_err_t err;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
287 ngx_signal_t *sig;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
288
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
289 ignore = 0;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
290
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
291 err = ngx_errno;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
292
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
293 for (sig = signals; sig->signo != 0; sig++) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
294 if (sig->signo == signo) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
295 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
296 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
297 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
298
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
299 ngx_time_update(0, 0);
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
300
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
301 action = "";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
302
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
303 switch (ngx_process) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
304
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
305 case NGX_PROCESS_MASTER:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
306 case NGX_PROCESS_SINGLE:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
307 switch (signo) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
308
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
309 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
310 ngx_quit = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
311 action = ", shutting down";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
312 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
313
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
314 case ngx_signal_value(NGX_TERMINATE_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
315 case SIGINT:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
316 ngx_terminate = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
317 action = ", exiting";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
318 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
319
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
320 case ngx_signal_value(NGX_NOACCEPT_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
321 ngx_noaccept = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
322 action = ", stop accepting connections";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
323 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
324
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
325 case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
326 ngx_reconfigure = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
327 action = ", reconfiguring";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
328 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
329
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
330 case ngx_signal_value(NGX_REOPEN_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
331 ngx_reopen = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
332 action = ", reopening logs";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
333 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
334
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
335 case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
336 if (getppid() > 1 || ngx_new_binary > 0) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
337
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
338 /*
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
339 * Ignore the signal in the new binary if its parent is
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
340 * not the init process, i.e. the old binary's process
236
c982febb7588 nginx 0.4.3
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
341 * is still running. Or ignore the signal in the old binary's
88
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
342 * process if the new binary's process is already running.
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
343 */
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
344
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
345 action = ", ignoring";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
346 ignore = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
347 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
348 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
349
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
350 ngx_change_binary = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
351 action = ", changing binary";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
352 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
353
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
354 case SIGALRM:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
355 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
356
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
357 case SIGIO:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
358 ngx_sigio = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
359 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
360
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
361 case SIGCHLD:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
362 ngx_reap = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
363 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
364 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
365
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
366 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
367
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
368 case NGX_PROCESS_WORKER:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
369 switch (signo) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
370
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
371 case ngx_signal_value(NGX_NOACCEPT_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
372 ngx_debug_quit = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
373 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
374 ngx_quit = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
375 action = ", shutting down";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
376 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
377
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
378 case ngx_signal_value(NGX_TERMINATE_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
379 case SIGINT:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
380 ngx_terminate = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
381 action = ", exiting";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
382 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
383
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
384 case ngx_signal_value(NGX_REOPEN_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
385 ngx_reopen = 1;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
386 action = ", reopening logs";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
387 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
388
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
389 case ngx_signal_value(NGX_RECONFIGURE_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
390 case ngx_signal_value(NGX_CHANGEBIN_SIGNAL):
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
391 case SIGIO:
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
392 action = ", ignoring";
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
393 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
394 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
395
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
396 break;
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
397 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
398
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
399 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
400 "signal %d (%s) received%s", signo, sig->signame, action);
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
401
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
402 if (ignore) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
403 ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, 0,
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
404 "the changing binary signal is ignored: "
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
405 "you should shutdown or terminate "
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
406 "before either old or new binary's process");
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
407 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
408
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
409 if (signo == SIGCHLD) {
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
410 ngx_process_get_status();
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
411 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
412
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
413 ngx_set_errno(err);
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
414 }
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
415
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
416
e916a291e9aa nginx 0.1.44
Igor Sysoev <http://sysoev.ru>
parents: 64
diff changeset
417 static void
64
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
418 ngx_process_get_status(void)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
419 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
420 int status;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
421 char *process;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422 ngx_pid_t pid;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
423 ngx_err_t err;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
424 ngx_int_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
425 ngx_uint_t one;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
426
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
427 one = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
428
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
429 for ( ;; ) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
430 pid = waitpid(-1, &status, WNOHANG);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
432 if (pid == 0) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
433 return;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
434 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
435
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
436 if (pid == -1) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
437 err = ngx_errno;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
438
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
439 if (err == NGX_EINTR) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
440 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
441 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
442
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
443 if (err == NGX_ECHILD && one) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
444 return;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
445 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
446
270
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 236
diff changeset
447 #if (NGX_SOLARIS || NGX_FREEBSD)
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
448
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
449 /*
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
450 * Solaris always calls the signal handler for each exited process
270
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 236
diff changeset
451 * despite waitpid() may be already called for this process.
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 236
diff changeset
452 *
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 236
diff changeset
453 * When several processes exit at the same time FreeBSD may
6eb1e38f0f1f nginx 0.5.5
Igor Sysoev <http://sysoev.ru>
parents: 236
diff changeset
454 * erroneously call the signal handler for exited process
372
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
455 * despite waitpid() may be already called for this process.
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
456 */
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
457
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
458 if (err == NGX_ECHILD) {
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
459 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, errno,
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
460 "waitpid() failed");
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
461 return;
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
462 }
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
463
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
464 #endif
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
465
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
466 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, errno,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
467 "waitpid() failed");
2
cc9f381affaa nginx 0.1.1
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
468
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
469 return;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
470 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
471
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
472
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
473 if (ngx_accept_mutex_ptr) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
474
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
475 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
476 * unlock the accept mutex if the abnormally exited process
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
477 * held it
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
478 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
479
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
480 ngx_atomic_cmp_set(ngx_accept_mutex_ptr, pid, 0);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
481 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
482
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
483
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
484 one = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
485 process = "unknown process";
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
486
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
487 for (i = 0; i < ngx_last_process; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
488 if (ngx_processes[i].pid == pid) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
489 ngx_processes[i].status = status;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
490 ngx_processes[i].exited = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
491 process = ngx_processes[i].name;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
492 break;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
493 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
494 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
495
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
496 if (WTERMSIG(status)) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
497 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
498 "%s %P exited on signal %d%s",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
499 process, pid, WTERMSIG(status),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
500 WCOREDUMP(status) ? " (core dumped)" : "");
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
501
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
502 } else {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
503 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
504 "%s %P exited with code %d",
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
505 process, pid, WEXITSTATUS(status));
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
506 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
507
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
508 if (WEXITSTATUS(status) == 2 && ngx_processes[i].respawn) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
509 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0,
372
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
510 "%s %P exited with fatal code %d "
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
511 "and can not be respawn",
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 270
diff changeset
512 process, pid, WEXITSTATUS(status));
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
513 ngx_processes[i].respawn = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
514 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
515 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
516 }
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
517
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
518
64
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
519 void
5db440287648 nginx 0.1.32
Igor Sysoev <http://sysoev.ru>
parents: 50
diff changeset
520 ngx_debug_point(void)
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
521 {
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
522 ngx_core_conf_t *ccf;
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
523
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
524 ccf = (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx,
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
525 ngx_core_module);
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
526
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
527 switch (ccf->debug_points) {
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
528
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
529 case NGX_DEBUG_POINTS_STOP:
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
530 raise(SIGSTOP);
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
531 break;
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
532
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
533 case NGX_DEBUG_POINTS_ABORT:
112
408f195b3482 nginx 0.3.3
Igor Sysoev <http://sysoev.ru>
parents: 106
diff changeset
534 ngx_abort();
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
535 }
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
536 }