35
35
#define MAXSIG 31
36
36
37
37
// Indices are one-indexed (signal 1 is at index 1). Index zero is unused.
38
- int signal_rewrite [MAXSIG + 1 ] = {0 };
38
+ int signal_rewrite [MAXSIG + 1 ] = {[ 0 ... MAXSIG ] = -1 };
39
39
40
40
pid_t child_pid = -1 ;
41
41
char debug = 0 ;
@@ -46,14 +46,18 @@ int translate_signal(int signum) {
46
46
return signum ;
47
47
} else {
48
48
int translated = signal_rewrite [signum ];
49
- return translated == 0 ? signum : translated ;
49
+ return translated == -1 ? signum : translated ;
50
50
}
51
51
}
52
52
53
53
void forward_signal (int signum ) {
54
54
signum = translate_signal (signum );
55
- kill (use_setsid ? - child_pid : child_pid , signum );
56
- DEBUG ("Forwarded signal %d to children.\n" , signum );
55
+ if (signum != -1 ) {
56
+ kill (use_setsid ? - child_pid : child_pid , signum );
57
+ DEBUG ("Forwarded signal %d to children.\n" , signum );
58
+ } else {
59
+ DEBUG ("Not forwarding signal %d to children (ignored).\n" , signum );
60
+ }
57
61
}
58
62
59
63
/*
@@ -119,6 +123,8 @@ void print_help(char *argv[]) {
119
123
" In this mode, signals are only proxied to the\n"
120
124
" direct child and not any of its descendants.\n"
121
125
" -r, --rewrite s:r Rewrite received signal s to new signal r before proxying.\n"
126
+ " To ignore (not proxy) a signal, rewrite it to 0.\n"
127
+ " This option can be specified multiple times.\n"
122
128
" -v, --verbose Print debugging information to stderr.\n"
123
129
" -h, --help Print this help message and exit.\n"
124
130
" -V, --version Print the current version and exit.\n"
@@ -146,7 +152,7 @@ void parse_rewrite_signum(char *arg) {
146
152
if (
147
153
sscanf (arg , "%d:%d" , & signum , & replacement ) == 2 &&
148
154
(signum >= 1 && signum <= MAXSIG ) &&
149
- (replacement >= 1 && replacement <= MAXSIG )
155
+ (replacement >= 0 && replacement <= MAXSIG )
150
156
) {
151
157
signal_rewrite [signum ] = replacement ;
152
158
} else {
@@ -155,7 +161,7 @@ void parse_rewrite_signum(char *arg) {
155
161
}
156
162
157
163
void set_rewrite_to_sigstop_if_not_defined (int signum ) {
158
- if (signal_rewrite [signum ] == 0 )
164
+ if (signal_rewrite [signum ] == -1 )
159
165
signal_rewrite [signum ] = SIGSTOP ;
160
166
}
161
167
0 commit comments