Mercurial > hg > nginx
comparison src/os/unix/ngx_posix_init.c @ 210:00cafae0bdf1
nginx-0.0.1-2003-12-14-23:10:27 import
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Sun, 14 Dec 2003 20:10:27 +0000 |
parents | 8dee38ea9117 |
children | 679f60139863 |
comparison
equal
deleted
inserted
replaced
209:e1c815be05ae | 210:00cafae0bdf1 |
---|---|
5 | 5 |
6 int ngx_max_sockets; | 6 int ngx_max_sockets; |
7 int ngx_inherited_nonblocking; | 7 int ngx_inherited_nonblocking; |
8 | 8 |
9 | 9 |
10 void ngx_signal_handler(int signo); | |
11 void ngx_exit_signal_handler(int signo); | |
10 void ngx_restart_signal_handler(int signo); | 12 void ngx_restart_signal_handler(int signo); |
11 void ngx_rotate_signal_handler(int signo); | 13 void ngx_rotate_signal_handler(int signo); |
12 | 14 |
13 | 15 |
16 typedef struct { | |
17 int signo; | |
18 char *signame; | |
19 char *action; | |
20 void (*handler)(int signo); | |
21 } ngx_signal_t; | |
22 | |
23 | |
24 ngx_signal_t signals[] = { | |
25 { ngx_signal_value(NGX_RESTART_SIGNAL), | |
26 "SIG" ngx_value(NGX_RESTART_SIGNAL), | |
27 "restarting", | |
28 ngx_signal_handler }, | |
29 | |
30 { ngx_signal_value(NGX_ROTATE_SIGNAL), | |
31 "SIG" ngx_value(NGX_ROTATE_SIGNAL), | |
32 "reopen logs", | |
33 ngx_signal_handler }, | |
34 | |
35 { ngx_signal_value(NGX_INTERRUPT_SIGNAL), | |
36 "SIG" ngx_value(NGX_INTERRUPT_SIGNAL), | |
37 "exiting", | |
38 ngx_signal_handler }, | |
39 | |
40 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL), | |
41 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL), | |
42 "shutdowning", | |
43 ngx_signal_handler }, | |
44 | |
45 { SIGCHLD, "SIGCHLD", NULL, ngx_sigchld_handler }, | |
46 | |
47 { SIGPIPE, "SIGPIPE, SIG_IGN", NULL, SIG_IGN }, | |
48 | |
49 { 0, NULL, NULL, NULL } | |
50 }; | |
51 | |
52 | |
14 int ngx_posix_init(ngx_log_t *log) | 53 int ngx_posix_init(ngx_log_t *log) |
15 { | 54 { |
16 struct rlimit rlmt; | 55 ngx_signal_t *sig; |
17 struct sigaction sa; | 56 struct rlimit rlmt; |
57 struct sigaction sa; | |
18 | 58 |
19 ngx_memzero(&sa, sizeof(struct sigaction)); | 59 for (sig = signals; sig->signo != 0; sig++) { |
20 sa.sa_handler = SIG_IGN; | 60 ngx_memzero(&sa, sizeof(struct sigaction)); |
21 sigemptyset(&sa.sa_mask); | 61 sa.sa_handler = sig->handler; |
22 if (sigaction(SIGPIPE, &sa, NULL) == -1) { | 62 sigemptyset(&sa.sa_mask); |
23 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | 63 if (sigaction(sig->signo, &sa, NULL) == -1) { |
24 "sigaction(SIGPIPE, SIG_IGN) failed"); | 64 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, |
25 return NGX_ERROR; | 65 "sigaction(%s) failed", sig->signame); |
66 return NGX_ERROR; | |
67 } | |
26 } | 68 } |
27 | |
28 ngx_memzero(&sa, sizeof(struct sigaction)); | |
29 sa.sa_handler = ngx_sigchld_handler; | |
30 sigemptyset(&sa.sa_mask); | |
31 if (sigaction(SIGCHLD, &sa, NULL) == -1) { | |
32 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | |
33 "sigaction(SIGCHLD) failed"); | |
34 return NGX_ERROR; | |
35 } | |
36 | |
37 sa.sa_handler = ngx_restart_signal_handler; | |
38 if (sigaction(ngx_signal_value(NGX_RESTART_SIGNAL), &sa, NULL) == -1) { | |
39 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | |
40 "sigaction(SIG" ngx_value(NGX_RESTART_SIGNAL) ") failed"); | |
41 return NGX_ERROR; | |
42 } | |
43 | |
44 sa.sa_handler = ngx_rotate_signal_handler; | |
45 if (sigaction(ngx_signal_value(NGX_ROTATE_SIGNAL), &sa, NULL) == -1) { | |
46 ngx_log_error(NGX_LOG_EMERG, log, ngx_errno, | |
47 "sigaction(SIG" ngx_value(NGX_ROTATE_SIGNAL) ") failed"); | |
48 return NGX_ERROR; | |
49 } | |
50 | |
51 | 69 |
52 if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { | 70 if (getrlimit(RLIMIT_NOFILE, &rlmt) == -1) { |
53 ngx_log_error(NGX_LOG_ALERT, log, errno, | 71 ngx_log_error(NGX_LOG_ALERT, log, errno, |
54 "getrlimit(RLIMIT_NOFILE) failed)"); | 72 "getrlimit(RLIMIT_NOFILE) failed)"); |
55 return NGX_ERROR; | 73 return NGX_ERROR; |
66 #else | 84 #else |
67 ngx_inherited_nonblocking = 0; | 85 ngx_inherited_nonblocking = 0; |
68 #endif | 86 #endif |
69 | 87 |
70 return NGX_OK; | 88 return NGX_OK; |
89 } | |
90 | |
91 | |
92 void ngx_signal_handler(int signo) | |
93 { | |
94 char *name; | |
95 ngx_signal_t *sig; | |
96 | |
97 for (sig = signals; sig->signo != 0; sig++) { | |
98 if (sig->signo == signo) { | |
99 break; | |
100 } | |
101 } | |
102 | |
103 /* STUB */ | |
104 name = strsignal(signo); | |
105 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0, | |
106 "signal #%d (%s: %s) received, %s", | |
107 signo, sig->signame, name, sig->action); | |
108 | |
109 switch (signo) { | |
110 | |
111 /* STUB */ | |
112 case SIGQUIT: | |
113 case SIGABRT: | |
114 | |
115 case ngx_signal_value(NGX_SHUTDOWN_SIGNAL): | |
116 case ngx_signal_value(NGX_INTERRUPT_SIGNAL): | |
117 done = 1; | |
118 break; | |
119 | |
120 case ngx_signal_value(NGX_RESTART_SIGNAL): | |
121 restart = 1; | |
122 break; | |
123 | |
124 case ngx_signal_value(NGX_ROTATE_SIGNAL): | |
125 rotate = 1; | |
126 break; | |
127 } | |
128 } | |
129 | |
130 | |
131 void ngx_exit_signal_handler(int signo) | |
132 { | |
133 char *s; | |
134 | |
135 s = strsignal(signo); | |
136 ngx_log_error(NGX_LOG_INFO, ngx_cycle->log, 0, | |
137 "%s signal received, exiting", s); | |
138 done = 1; | |
71 } | 139 } |
72 | 140 |
73 | 141 |
74 void ngx_restart_signal_handler(int signo) | 142 void ngx_restart_signal_handler(int signo) |
75 { | 143 { |