comparison src/os/unix/ngx_process.c @ 2738:ae81441e23f4

implement "-s signal" option for Unix
author Igor Sysoev <igor@sysoev.ru>
date Tue, 21 Apr 2009 20:25:49 +0000
parents 693132294e21
children d82993af1da0 4b5cf483c6a8
comparison
equal deleted inserted replaced
2737:d52cf82d0d77 2738:ae81441e23f4
11 11
12 12
13 typedef struct { 13 typedef struct {
14 int signo; 14 int signo;
15 char *signame; 15 char *signame;
16 char *name;
16 void (*handler)(int signo); 17 void (*handler)(int signo);
17 } ngx_signal_t; 18 } ngx_signal_t;
18 19
19 20
20 21
34 35
35 36
36 ngx_signal_t signals[] = { 37 ngx_signal_t signals[] = {
37 { ngx_signal_value(NGX_RECONFIGURE_SIGNAL), 38 { ngx_signal_value(NGX_RECONFIGURE_SIGNAL),
38 "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL), 39 "SIG" ngx_value(NGX_RECONFIGURE_SIGNAL),
40 "reload",
39 ngx_signal_handler }, 41 ngx_signal_handler },
40 42
41 { ngx_signal_value(NGX_REOPEN_SIGNAL), 43 { ngx_signal_value(NGX_REOPEN_SIGNAL),
42 "SIG" ngx_value(NGX_REOPEN_SIGNAL), 44 "SIG" ngx_value(NGX_REOPEN_SIGNAL),
45 "reopen",
43 ngx_signal_handler }, 46 ngx_signal_handler },
44 47
45 { ngx_signal_value(NGX_NOACCEPT_SIGNAL), 48 { ngx_signal_value(NGX_NOACCEPT_SIGNAL),
46 "SIG" ngx_value(NGX_NOACCEPT_SIGNAL), 49 "SIG" ngx_value(NGX_NOACCEPT_SIGNAL),
50 "",
47 ngx_signal_handler }, 51 ngx_signal_handler },
48 52
49 { ngx_signal_value(NGX_TERMINATE_SIGNAL), 53 { ngx_signal_value(NGX_TERMINATE_SIGNAL),
50 "SIG" ngx_value(NGX_TERMINATE_SIGNAL), 54 "SIG" ngx_value(NGX_TERMINATE_SIGNAL),
55 "stop",
51 ngx_signal_handler }, 56 ngx_signal_handler },
52 57
53 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL), 58 { ngx_signal_value(NGX_SHUTDOWN_SIGNAL),
54 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL), 59 "SIG" ngx_value(NGX_SHUTDOWN_SIGNAL),
60 "quit",
55 ngx_signal_handler }, 61 ngx_signal_handler },
56 62
57 { ngx_signal_value(NGX_CHANGEBIN_SIGNAL), 63 { ngx_signal_value(NGX_CHANGEBIN_SIGNAL),
58 "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL), 64 "SIG" ngx_value(NGX_CHANGEBIN_SIGNAL),
65 "",
59 ngx_signal_handler }, 66 ngx_signal_handler },
60 67
61 { SIGALRM, "SIGALRM", ngx_signal_handler }, 68 { SIGALRM, "SIGALRM", "", ngx_signal_handler },
62 69
63 { SIGINT, "SIGINT", ngx_signal_handler }, 70 { SIGINT, "SIGINT", "", ngx_signal_handler },
64 71
65 { SIGIO, "SIGIO", ngx_signal_handler }, 72 { SIGIO, "SIGIO", "", ngx_signal_handler },
66 73
67 { SIGCHLD, "SIGCHLD", ngx_signal_handler }, 74 { SIGCHLD, "SIGCHLD", "", ngx_signal_handler },
68 75
69 { SIGPIPE, "SIGPIPE, SIG_IGN", SIG_IGN }, 76 { SIGPIPE, "SIGPIPE, SIG_IGN", "", SIG_IGN },
70 77
71 { 0, NULL, NULL } 78 { 0, NULL, "", NULL }
72 }; 79 };
73 80
74 81
75 ngx_pid_t 82 ngx_pid_t
76 ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data, 83 ngx_spawn_process(ngx_cycle_t *cycle, ngx_spawn_proc_pt proc, void *data,
538 545
539 case NGX_DEBUG_POINTS_ABORT: 546 case NGX_DEBUG_POINTS_ABORT:
540 ngx_abort(); 547 ngx_abort();
541 } 548 }
542 } 549 }
550
551
552 ngx_int_t
553 ngx_os_signal_process(ngx_cycle_t *cycle, char *name, ngx_int_t pid)
554 {
555 ngx_signal_t *sig;
556
557 for (sig = signals; sig->signo != 0; sig++) {
558 if (ngx_strcmp(name, sig->name) == 0) {
559 if (kill(pid, sig->signo) != -1) {
560 return 0;
561 }
562
563 ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
564 "kill(%P, %d) failed", pid, sig->signo);
565 }
566 }
567
568 return 1;
569 }