1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
--- busybox-1.10.2/shell/hush.c Sat Apr 19 05:50:31 2008
+++ busybox-1.10.2-hush/shell/hush.c Mon May 26 00:32:40 2008
@@ -699,9 +699,18 @@
BLTIN(NULL, NULL, NULL)
};
+/* Signals are grouped, we handle them in batches */
+static void set_misc_sighandler(void (*handler)(int))
+{
+ bb_signals(0
+ + (1 << SIGINT)
+ + (1 << SIGQUIT)
+ + (1 << SIGTERM)
+ , handler);
+}
+
#if ENABLE_HUSH_JOB
-/* Signals are grouped, we handle them in batches */
static void set_fatal_sighandler(void (*handler)(int))
{
bb_signals(0
@@ -725,14 +734,6 @@
+ (1 << SIGTTOU)
, handler);
}
-static void set_misc_sighandler(void (*handler)(int))
-{
- bb_signals(0
- + (1 << SIGINT)
- + (1 << SIGQUIT)
- + (1 << SIGTERM)
- , handler);
-}
/* SIGCHLD is special and handled separately */
static void set_every_sighandler(void (*handler)(int))
@@ -815,7 +816,6 @@
#define set_fatal_sighandler(handler) ((void)0)
#define set_jobctrl_sighandler(handler) ((void)0)
-#define set_misc_sighandler(handler) ((void)0)
#define hush_exit(e) exit(e)
#endif /* JOB */
@@ -3907,8 +3907,10 @@
/* give up */
interactive_fd = 0;
}
- if (interactive_fd)
+ if (interactive_fd) {
fcntl(interactive_fd, F_SETFD, FD_CLOEXEC);
+ set_misc_sighandler(SIG_IGN);
+ }
}
#endif
|