Mercurial > hg > nginx
annotate src/os/unix/ngx_process.c @ 4315:424a1ac6af43
Added (void) as we intentionally ignore returned values.
Requested by Igor Sysoev.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Mon, 28 Nov 2011 11:01:42 +0000 |
parents | 45272aab5eea |
children | d620f497c50f |
rev | line source |
---|---|
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
391
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
391
diff
changeset
|
2 /* |
444
42d11f017717
nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents:
441
diff
changeset
|
3 * Copyright (C) Igor Sysoev |
441
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
391
diff
changeset
|
4 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
391
diff
changeset
|
5 |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
6 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
7 #include <ngx_config.h> |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
8 #include <ngx_core.h> |
306
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
9 #include <ngx_event.h> |
391
b670db10cbbd
nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
389
diff
changeset
|
10 #include <ngx_channel.h> |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
12 |
539 | 13 typedef struct { |
3681 | 14 int signo; |
15 char *signame; | |
16 char *name; | |
17 void (*handler)(int signo); | |
539 | 18 } ngx_signal_t; |
19 | |
20 | |
21 | |
279
b79f021a644a
nginx-0.0.2-2004-03-04-19:34:23 import
Igor Sysoev <igor@sysoev.ru>
parents:
272
diff
changeset
|
22 static void ngx_execute_proc(ngx_cycle_t *cycle, void *data); |
539 | 23 static void ngx_signal_handler(int signo); |
24 static void ngx_process_get_status(void); | |
4311
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
25 static void ngx_unlock_mutexes(ngx_pid_t pid); |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
26 |
452 | 27 |
28 int ngx_argc; | |
29 char **ngx_argv; | |
30 char **ngx_os_argv; | |
31 | |
32 ngx_int_t ngx_process_slot; | |
33 ngx_socket_t ngx_channel; | |
34 ngx_int_t ngx_last_process; | |
35 ngx_process_t ngx_processes[NGX_MAX_PROCESSES]; | |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
36 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
37 |
539 | 38 ngx_signal_t signals[] = { |
39 { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), | |
40 "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
41 "reload", |
539 | 42 ngx_signal_handler }, |
43 | |
44 { ngx_signal_value(NGX_REOPEN_SIGNAL), | |
45 "SIG" ngx_value(NGX_REOPEN_SIGNAL), | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
46 "reopen", |
539 | 47 ngx_signal_handler }, |
48 | |
49 { ngx_signal_value(NGX_NOACCEPT_SIGNAL), | |
50 "SIG" ngx_value(NGX_NOACCEPT_SIGNAL), | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
51 "", |
539 | 52 ngx_signal_handler }, |
53 | |
54 { ngx_signal_value(NGX_TERMINATE_SIGNAL), | |
55 "SIG" ngx_value(NGX_TERMINATE_SIGNAL), | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
56 "stop", |
539 | 57 ngx_signal_handler }, |
58 | |
59 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL), | |
60 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL), | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
61 "quit", |
539 | 62 ngx_signal_handler }, |
63 | |
64 { ngx_signal_value(NGX_CHANGEBIN_SIGNAL), | |
65 "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL), | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
66 "", |
539 | 67 ngx_signal_handler }, |
68 | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
69 { SIGALRM, "SIGALRM", "", ngx_signal_handler }, |
539 | 70 |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
71 { SIGINT, "SIGINT", "", ngx_signal_handler }, |
539 | 72 |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
73 { SIGIO, "SIGIO", "", ngx_signal_handler }, |
539 | 74 |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
75 { SIGCHLD, "SIGCHLD", "", ngx_signal_handler }, |
539 | 76 |
3045 | 77 { SIGSYS, "SIGSYS, SIG_IGN", "", SIG_IGN }, |
78 | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
79 { SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN }, |
539 | 80 |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
81 { 0, NULL, "", NULL } |
539 | 82 }; |
83 | |
84 | |
515 | 85 ngx_pid_t |
86 ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, | |
87 char *name, ngx_int_t respawn) | |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
88 { |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
89 u_long on; |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
90 ngx_pid_t pid; |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
91 ngx_int_t s; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
92 |
389
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
93 if (respawn >= 0) { |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
94 s = respawn; |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
95 |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
96 } else { |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
97 for (s = 0; s < ngx_last_process; s++) { |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
98 if (ngx_processes[s].pid == -1) { |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
99 break; |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
100 } |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
101 } |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
102 |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
103 if (s == NGX_MAX_PROCESSES) { |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
104 ngx_log_error(NGX_LOG_ALERT, cycle->log, 0, |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
105 "no more than %d processes can be spawned", |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
106 NGX_MAX_PROCESSES); |
543 | 107 return NGX_INVALID_PID; |
389
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
108 } |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
109 } |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
110 |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
111 |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
112 if (respawn != NGX_PROCESS_DETACHED) { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
113 |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
114 /* Solaris 9 still has no AF_LOCAL */ |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
115 |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
116 if (socketpair(AF_UNIX, SOCK_STREAM, 0, ngx_processes[s].channel) == -1) |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
117 { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
118 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
119 "socketpair() failed while spawning \"%s\"", name); |
543 | 120 return NGX_INVALID_PID; |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
121 } |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
122 |
391
b670db10cbbd
nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
389
diff
changeset
|
123 ngx_log_debug2(NGX_LOG_DEBUG_CORE, cycle->log, 0, |
b670db10cbbd
nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
389
diff
changeset
|
124 "channel %d:%d", |
b670db10cbbd
nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
389
diff
changeset
|
125 ngx_processes[s].channel[0], |
b670db10cbbd
nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
389
diff
changeset
|
126 ngx_processes[s].channel[1]); |
b670db10cbbd
nginx-0.0.7-2004-07-14-20:01:42 import
Igor Sysoev <igor@sysoev.ru>
parents:
389
diff
changeset
|
127 |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
128 if (ngx_nonblocking(ngx_processes[s].channel[0]) == -1) { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
129 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
130 ngx_nonblocking_n " failed while spawning \"%s\"", |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
131 name); |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
132 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 133 return NGX_INVALID_PID; |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
134 } |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
135 |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
136 if (ngx_nonblocking(ngx_processes[s].channel[1]) == -1) { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
137 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
138 ngx_nonblocking_n " failed while spawning \"%s\"", |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
139 name); |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
140 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 141 return NGX_INVALID_PID; |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
142 } |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
143 |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
144 on = 1; |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
145 if (ioctl(ngx_processes[s].channel[0], FIOASYNC, &on) == -1) { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
146 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
147 "ioctl(FIOASYNC) failed while spawning \"%s\"", name); |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
148 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 149 return NGX_INVALID_PID; |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
150 } |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
151 |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
152 if (fcntl(ngx_processes[s].channel[0], F_SETOWN, ngx_pid) == -1) { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
153 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
154 "fcntl(F_SETOWN) failed while spawning \"%s\"", name); |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
155 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 156 return NGX_INVALID_PID; |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
157 } |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
158 |
366
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
159 if (fcntl(ngx_processes[s].channel[0], F_SETFD, FD_CLOEXEC) == -1) { |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
160 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
161 "fcntl(FD_CLOEXEC) failed while spawning \"%s\"", |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
162 name); |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
163 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 164 return NGX_INVALID_PID; |
366
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
165 } |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
166 |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
167 if (fcntl(ngx_processes[s].channel[1], F_SETFD, FD_CLOEXEC) == -1) { |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
168 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
169 "fcntl(FD_CLOEXEC) failed while spawning \"%s\"", |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
170 name); |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
171 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 172 return NGX_INVALID_PID; |
366
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
173 } |
e411b1482ee3
nginx-0.0.7-2004-06-23-19:18:17 import
Igor Sysoev <igor@sysoev.ru>
parents:
365
diff
changeset
|
174 |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
175 ngx_channel = ngx_processes[s].channel[1]; |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
176 |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
177 } else { |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
178 ngx_processes[s].channel[0] = -1; |
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
179 ngx_processes[s].channel[1] = -1; |
360
239e37d44a34
nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
355
diff
changeset
|
180 } |
239e37d44a34
nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
355
diff
changeset
|
181 |
239e37d44a34
nginx-0.0.7-2004-06-18-20:22:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
355
diff
changeset
|
182 ngx_process_slot = s; |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
183 |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
184 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
185 pid = fork(); |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
186 |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
187 switch (pid) { |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
188 |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
189 case -1: |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
190 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
191 "fork() failed while spawning \"%s\"", name); |
365
fd24ba70e1b3
nginx-0.0.7-2004-06-23-09:54:27 import
Igor Sysoev <igor@sysoev.ru>
parents:
360
diff
changeset
|
192 ngx_close_channel(ngx_processes[s].channel, cycle->log); |
543 | 193 return NGX_INVALID_PID; |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
194 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
195 case 0: |
249
2a0540287298
nginx-0.0.2-2004-02-03-19:43:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
248
diff
changeset
|
196 ngx_pid = ngx_getpid(); |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
197 proc(cycle, data); |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
198 break; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
199 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
200 default: |
195
8dee38ea9117
nginx-0.0.1-2003-11-25-23:44:56 import
Igor Sysoev <igor@sysoev.ru>
parents:
191
diff
changeset
|
201 break; |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
202 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
203 |
477 | 204 ngx_log_error(NGX_LOG_NOTICE, cycle->log, 0, "start %s %P", name, pid); |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
205 |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
206 ngx_processes[s].pid = pid; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
207 ngx_processes[s].exited = 0; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
208 |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
209 if (respawn >= 0) { |
225
2e9a8a14a0cf
nginx-0.0.1-2004-01-13-19:43:23 import
Igor Sysoev <igor@sysoev.ru>
parents:
224
diff
changeset
|
210 return pid; |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
211 } |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
212 |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
213 ngx_processes[s].proc = proc; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
214 ngx_processes[s].data = data; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
215 ngx_processes[s].name = name; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
216 ngx_processes[s].exiting = 0; |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
217 |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
218 switch (respawn) { |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
219 |
3016
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
220 case NGX_PROCESS_NORESPAWN: |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
221 ngx_processes[s].respawn = 0; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
222 ngx_processes[s].just_spawn = 0; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
223 ngx_processes[s].detached = 0; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
224 break; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
225 |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
226 case NGX_PROCESS_JUST_SPAWN: |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
227 ngx_processes[s].respawn = 0; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
228 ngx_processes[s].just_spawn = 1; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
229 ngx_processes[s].detached = 0; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
230 break; |
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
231 |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
232 case NGX_PROCESS_RESPAWN: |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
233 ngx_processes[s].respawn = 1; |
3016
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
234 ngx_processes[s].just_spawn = 0; |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
235 ngx_processes[s].detached = 0; |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
236 break; |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
237 |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
238 case NGX_PROCESS_JUST_RESPAWN: |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
239 ngx_processes[s].respawn = 1; |
3016
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
240 ngx_processes[s].just_spawn = 1; |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
241 ngx_processes[s].detached = 0; |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
242 break; |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
243 |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
244 case NGX_PROCESS_DETACHED: |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
245 ngx_processes[s].respawn = 0; |
3016
d82993af1da0
introduce NGX_PROCESS_JUST_SPAWN and change field name accordingly
Igor Sysoev <igor@sysoev.ru>
parents:
2738
diff
changeset
|
246 ngx_processes[s].just_spawn = 0; |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
247 ngx_processes[s].detached = 1; |
318
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
248 break; |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
249 } |
56496082668b
nginx-0.0.3-2004-04-16-09:14:16 import
Igor Sysoev <igor@sysoev.ru>
parents:
306
diff
changeset
|
250 |
389
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
251 if (s == ngx_last_process) { |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
252 ngx_last_process++; |
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
253 } |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
254 |
225
2e9a8a14a0cf
nginx-0.0.1-2004-01-13-19:43:23 import
Igor Sysoev <igor@sysoev.ru>
parents:
224
diff
changeset
|
255 return pid; |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
256 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
257 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
258 |
515 | 259 ngx_pid_t |
260 ngx_execute(ngx_cycle_t *cycle, ngx_exec_ctx_t *ctx) | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
261 { |
279
b79f021a644a
nginx-0.0.2-2004-03-04-19:34:23 import
Igor Sysoev <igor@sysoev.ru>
parents:
272
diff
changeset
|
262 return ngx_spawn_process(cycle, ngx_execute_proc, ctx, ctx->name, |
226
b0c1e21e68db
nginx-0.0.1-2004-01-14-00:33:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
225
diff
changeset
|
263 NGX_PROCESS_DETACHED); |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
264 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
265 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
266 |
515 | 267 static void |
268 ngx_execute_proc(ngx_cycle_t *cycle, void *data) | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
269 { |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
270 ngx_exec_ctx_t *ctx = data; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
271 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
272 if (execve(ctx->path, ctx->argv, ctx->envp) == -1) { |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
273 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
274 "execve() failed while executing %s \"%s\"", |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
275 ctx->name, ctx->path); |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
276 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
277 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
278 exit(1); |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
279 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
280 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
281 |
539 | 282 ngx_int_t |
283 ngx_init_signals(ngx_log_t *log) | |
284 { | |
285 ngx_signal_t *sig; | |
286 struct sigaction sa; | |
287 | |
288 for (sig = signals; sig->signo != 0; sig++) { | |
289 ngx_memzero(&sa, sizeof(struct sigaction)); | |
290 sa.sa_handler = sig->handler; | |
291 sigemptyset(&sa.sa_mask); | |
292 if (sigaction(sig->signo, &sa, NULL) == -1) { | |
293 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | |
294 "sigaction(%s) failed", sig->signame); | |
295 return NGX_ERROR; | |
296 } | |
297 } | |
298 | |
299 return NGX_OK; | |
300 } | |
301 | |
302 | |
515 | 303 void |
539 | 304 ngx_signal_handler(int signo) |
305 { | |
306 char *action; | |
307 ngx_int_t ignore; | |
308 ngx_err_t err; | |
309 ngx_signal_t *sig; | |
310 | |
311 ignore = 0; | |
312 | |
313 err = ngx_errno; | |
314 | |
315 for (sig = signals; sig->signo != 0; sig++) { | |
316 if (sig->signo == signo) { | |
317 break; | |
318 } | |
319 } | |
320 | |
3475
ab353d7dc182
*) introduce ngx_time_sigsafe_update() to update the error log time only
Igor Sysoev <igor@sysoev.ru>
parents:
3474
diff
changeset
|
321 ngx_time_sigsafe_update(); |
539 | 322 |
323 action = ""; | |
324 | |
325 switch (ngx_process) { | |
326 | |
327 case NGX_PROCESS_MASTER: | |
328 case NGX_PROCESS_SINGLE: | |
329 switch (signo) { | |
330 | |
331 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): | |
332 ngx_quit = 1; | |
333 action = ", shutting down"; | |
334 break; | |
335 | |
336 case ngx_signal_value(NGX_TERMINATE_SIGNAL): | |
337 case SIGINT: | |
338 ngx_terminate = 1; | |
339 action = ", exiting"; | |
340 break; | |
341 | |
342 case ngx_signal_value(NGX_NOACCEPT_SIGNAL): | |
4019
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
343 if (ngx_daemonized) { |
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
344 ngx_noaccept = 1; |
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
345 action = ", stop accepting connections"; |
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
346 } |
539 | 347 break; |
348 | |
349 case ngx_signal_value(NGX_RECONFIGURE_SIGNAL): | |
350 ngx_reconfigure = 1; | |
351 action = ", reconfiguring"; | |
352 break; | |
353 | |
354 case ngx_signal_value(NGX_REOPEN_SIGNAL): | |
355 ngx_reopen = 1; | |
356 action = ", reopening logs"; | |
357 break; | |
358 | |
359 case ngx_signal_value(NGX_CHANGEBIN_SIGNAL): | |
360 if (getppid() > 1 || ngx_new_binary > 0) { | |
361 | |
362 /* | |
363 * Ignore the signal in the new binary if its parent is | |
364 * not the init process, i.e. the old binary's process | |
698 | 365 * is still running. Or ignore the signal in the old binary's |
539 | 366 * process if the new binary's process is already running. |
367 */ | |
368 | |
369 action = ", ignoring"; | |
370 ignore = 1; | |
371 break; | |
372 } | |
373 | |
374 ngx_change_binary = 1; | |
375 action = ", changing binary"; | |
376 break; | |
377 | |
378 case SIGALRM: | |
3048
846d0e2fa483
twice termination delay only after SIGALRM, otherwise many separate SIGCHLD
Igor Sysoev <igor@sysoev.ru>
parents:
3045
diff
changeset
|
379 ngx_sigalrm = 1; |
539 | 380 break; |
381 | |
382 case SIGIO: | |
383 ngx_sigio = 1; | |
384 break; | |
385 | |
386 case SIGCHLD: | |
387 ngx_reap = 1; | |
388 break; | |
389 } | |
390 | |
391 break; | |
392 | |
393 case NGX_PROCESS_WORKER: | |
3358
f94e8ff65aa2
add NGX_PROCESS_HELPER process status
Igor Sysoev <igor@sysoev.ru>
parents:
3048
diff
changeset
|
394 case NGX_PROCESS_HELPER: |
539 | 395 switch (signo) { |
396 | |
397 case ngx_signal_value(NGX_NOACCEPT_SIGNAL): | |
4019
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
398 if (!ngx_daemonized) { |
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
399 break; |
5364d2e711cc
SIGWINCH/NOACCEPT signal is disabled now in non-daemon mode.
Igor Sysoev <igor@sysoev.ru>
parents:
3787
diff
changeset
|
400 } |
539 | 401 ngx_debug_quit = 1; |
402 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): | |
403 ngx_quit = 1; | |
404 action = ", shutting down"; | |
405 break; | |
406 | |
407 case ngx_signal_value(NGX_TERMINATE_SIGNAL): | |
408 case SIGINT: | |
409 ngx_terminate = 1; | |
410 action = ", exiting"; | |
411 break; | |
412 | |
413 case ngx_signal_value(NGX_REOPEN_SIGNAL): | |
414 ngx_reopen = 1; | |
415 action = ", reopening logs"; | |
416 break; | |
417 | |
418 case ngx_signal_value(NGX_RECONFIGURE_SIGNAL): | |
419 case ngx_signal_value(NGX_CHANGEBIN_SIGNAL): | |
420 case SIGIO: | |
421 action = ", ignoring"; | |
422 break; | |
423 } | |
424 | |
425 break; | |
426 } | |
427 | |
428 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0, | |
429 "signal %d (%s) received%s", signo, sig->signame, action); | |
430 | |
431 if (ignore) { | |
432 ngx_log_error(NGX_LOG_CRIT, ngx_cycle->log, 0, | |
433 "the changing binary signal is ignored: " | |
434 "you should shutdown or terminate " | |
435 "before either old or new binary's process"); | |
436 } | |
437 | |
438 if (signo == SIGCHLD) { | |
439 ngx_process_get_status(); | |
440 } | |
441 | |
442 ngx_set_errno(err); | |
443 } | |
444 | |
445 | |
446 static void | |
515 | 447 ngx_process_get_status(void) |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
448 { |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
449 int status; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
450 char *process; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
451 ngx_pid_t pid; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
452 ngx_err_t err; |
354
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
453 ngx_int_t i; |
eaf1f651cf86
nginx-0.0.7-2004-06-15-11:55:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
318
diff
changeset
|
454 ngx_uint_t one; |
477 | 455 |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
456 one = 0; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
457 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
458 for ( ;; ) { |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
459 pid = waitpid(-1, &status, WNOHANG); |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
460 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
461 if (pid == 0) { |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
462 return; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
463 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
464 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
465 if (pid == -1) { |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
466 err = ngx_errno; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
467 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
468 if (err == NGX_EINTR) { |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
469 continue; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
470 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
471 |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
472 if (err == NGX_ECHILD && one) { |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
473 return; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
474 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
475 |
943
cbe0292e53b3
lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents:
698
diff
changeset
|
476 #if (NGX_SOLARIS || NGX_FREEBSD) |
452 | 477 |
478 /* | |
479 * Solaris always calls the signal handler for each exited process | |
943
cbe0292e53b3
lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents:
698
diff
changeset
|
480 * despite waitpid() may be already called for this process. |
cbe0292e53b3
lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents:
698
diff
changeset
|
481 * |
cbe0292e53b3
lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents:
698
diff
changeset
|
482 * When several processes exit at the same time FreeBSD may |
cbe0292e53b3
lower the log level of the waitpid() ENOCHILD error on FreeBSD
Igor Sysoev <igor@sysoev.ru>
parents:
698
diff
changeset
|
483 * erroneously call the signal handler for exited process |
1963 | 484 * despite waitpid() may be already called for this process. |
452 | 485 */ |
486 | |
487 if (err == NGX_ECHILD) { | |
3787
e294f37401c0
use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents:
3681
diff
changeset
|
488 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, err, |
e294f37401c0
use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents:
3681
diff
changeset
|
489 "waitpid() failed"); |
563 | 490 return; |
452 | 491 } |
492 | |
493 #endif | |
494 | |
3787
e294f37401c0
use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents:
3681
diff
changeset
|
495 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, err, |
e294f37401c0
use copied strerror() messages and autoconfigured sys_nerr value
Igor Sysoev <igor@sysoev.ru>
parents:
3681
diff
changeset
|
496 "waitpid() failed"); |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
497 return; |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
498 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
499 |
306
6b91bfbc4123
nginx-0.0.3-2004-04-05-00:32:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
279
diff
changeset
|
500 |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
501 one = 1; |
389
537de4dca8ca
nginx-0.0.7-2004-07-13-21:59:12 import
Igor Sysoev <igor@sysoev.ru>
parents:
366
diff
changeset
|
502 process = "unknown process"; |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
503 |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
504 for (i = 0; i < ngx_last_process; i++) { |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
505 if (ngx_processes[i].pid == pid) { |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
506 ngx_processes[i].status = status; |
222
99df0edb63ed
nginx-0.0.1-2004-01-09-00:02:06 import
Igor Sysoev <igor@sysoev.ru>
parents:
221
diff
changeset
|
507 ngx_processes[i].exited = 1; |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
508 process = ngx_processes[i].name; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
509 break; |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
510 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
511 } |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
512 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
513 if (WTERMSIG(status)) { |
2494 | 514 #ifdef WCOREDUMP |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
515 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, |
461 | 516 "%s %P exited on signal %d%s", |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
517 process, pid, WTERMSIG(status), |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
518 WCOREDUMP(status) ? " (core dumped)" : ""); |
2494 | 519 #else |
520 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, | |
521 "%s %P exited on signal %d", | |
522 process, pid, WTERMSIG(status)); | |
523 #endif | |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
524 |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
525 } else { |
477 | 526 ngx_log_error(NGX_LOG_NOTICE, ngx_cycle->log, 0, |
461 | 527 "%s %P exited with code %d", |
218
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
528 process, pid, WEXITSTATUS(status)); |
05592fd7a436
nginx-0.0.1-2004-01-05-23:55:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
195
diff
changeset
|
529 } |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
227
diff
changeset
|
530 |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
227
diff
changeset
|
531 if (WEXITSTATUS(status) == 2 && ngx_processes[i].respawn) { |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
227
diff
changeset
|
532 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, |
1963 | 533 "%s %P exited with fatal code %d " |
4133
59b99f217c6d
Replaced "can not" with "cannot" and "could not" in a bunch of places.
Ruslan Ermilov <ru@nginx.com>
parents:
4019
diff
changeset
|
534 "and cannot be respawned", |
1963 | 535 process, pid, WEXITSTATUS(status)); |
234
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
227
diff
changeset
|
536 ngx_processes[i].respawn = 0; |
cd71b95716b4
nginx-0.0.1-2004-01-20-23:40:08 import
Igor Sysoev <igor@sysoev.ru>
parents:
227
diff
changeset
|
537 } |
4311
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
538 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
539 ngx_unlock_mutexes(pid); |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
540 } |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
541 } |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
542 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
543 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
544 static void |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
545 ngx_unlock_mutexes(ngx_pid_t pid) |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
546 { |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
547 ngx_uint_t i; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
548 ngx_shm_zone_t *shm_zone; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
549 ngx_list_part_t *part; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
550 ngx_slab_pool_t *sp; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
551 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
552 /* |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
553 * unlock the accept mutex if the abnormally exited process |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
554 * held it |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
555 */ |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
556 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
557 if (ngx_accept_mutex_ptr) { |
4315
424a1ac6af43
Added (void) as we intentionally ignore returned values.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4311
diff
changeset
|
558 (void) ngx_shmtx_force_unlock(&ngx_accept_mutex, pid); |
4311
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
559 } |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
560 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
561 /* |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
562 * unlock shared memory mutexes if held by the abnormally exited |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
563 * process |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
564 */ |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
565 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
566 part = (ngx_list_part_t *) &ngx_cycle->shared_memory.part; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
567 shm_zone = part->elts; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
568 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
569 for (i = 0; /* void */ ; i++) { |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
570 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
571 if (i >= part->nelts) { |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
572 if (part->next == NULL) { |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
573 break; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
574 } |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
575 part = part->next; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
576 shm_zone = part->elts; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
577 i = 0; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
578 } |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
579 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
580 sp = (ngx_slab_pool_t *) shm_zone[i].shm.addr; |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
581 |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
582 if (ngx_shmtx_force_unlock(&sp->mutex, pid)) { |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
583 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, 0, |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
584 "shared memory zone \"%V\" was locked by %P", |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
585 &shm_zone[i].shm.name, pid); |
45272aab5eea
Unlock of shared memory zones on process crash.
Maxim Dounin <mdounin@mdounin.ru>
parents:
4309
diff
changeset
|
586 } |
191
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
587 } |
71ce40b3c37b
nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
588 } |
461 | 589 |
590 | |
515 | 591 void |
592 ngx_debug_point(void) | |
461 | 593 { |
594 ngx_core_conf_t *ccf; | |
595 | |
596 ccf = (ngx_core_conf_t *) ngx_get_conf(ngx_cycle->conf_ctx, | |
597 ngx_core_module); | |
598 | |
599 switch (ccf->debug_points) { | |
600 | |
601 case NGX_DEBUG_POINTS_STOP: | |
602 raise(SIGSTOP); | |
603 break; | |
604 | |
605 case NGX_DEBUG_POINTS_ABORT: | |
563 | 606 ngx_abort(); |
461 | 607 } |
608 } | |
2738
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
609 |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
610 |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
611 ngx_int_t |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
612 ngx_os_signal_process(ngx_cycle_t *cycle, char *name, ngx_int_t pid) |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
613 { |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
614 ngx_signal_t *sig; |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
615 |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
616 for (sig = signals; sig->signo != 0; sig++) { |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
617 if (ngx_strcmp(name, sig->name) == 0) { |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
618 if (kill(pid, sig->signo) != -1) { |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
619 return 0; |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
620 } |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
621 |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
622 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno, |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
623 "kill(%P, %d) failed", pid, sig->signo); |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
624 } |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
625 } |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
626 |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
627 return 1; |
ae81441e23f4
implement "-s signal" option for Unix
Igor Sysoev <igor@sysoev.ru>
parents:
2494
diff
changeset
|
628 } |