Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/shell/ash_doc.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 984 - (hide annotations) (download)
Sun May 30 11:32:42 2010 UTC (14 years ago) by niro
File MIME type: text/plain
File size: 4320 byte(s)
-updated to busybox-1.16.1 and enabled blkid/uuid support in default config
1 niro 816 Wait + signals
2    
3     We had some bugs here which are hard to test in testsuite.
4    
5     Bug 1280 (http://busybox.net/bugs/view.php?id=1280):
6     was misbehaving in interactive ash. Correct behavior:
7    
8     $ sleep 20 &
9     $ wait
10     ^C
11     $ wait
12     ^C
13     $ wait
14     ^C
15     ...
16    
17 niro 984
18 niro 816 Bug 1984 (http://busybox.net/bugs/view.php?id=1984):
19     traps were not triggering:
20    
21     trap_handler_usr () {
22     echo trap usr
23     }
24     trap_handler_int () {
25     echo trap int
26     }
27     trap trap_handler_usr USR1
28     trap trap_handler_int INT
29     sleep 3600 &
30     echo "Please do: kill -USR1 $$"
31     echo "or: kill -INT $$"
32     while true; do wait; echo wait interrupted; done
33 niro 984
34    
35     Bug 189 (https://bugs.busybox.net/show_bug.cgi?id=189)
36    
37     func() {
38     sleep 1
39     }
40     while (true); do
41     func
42     echo Looping
43     done
44    
45     ^C was observed to make ash processes geometrically multiply (!) instead
46     of exiting. (true) in subshell does not seem to matter, as another user
47     reports the same with:
48    
49     trap "echo USR1" USR1
50     while true; do
51     echo Sleeping
52     sleep 5
53     done
54    
55     Compat note.
56     Bash version 3.2.0(1) exits this script at the receipt of SIGINT
57     _only_ if it had two last children die from it.
58     The following trace was obtained while periodically running
59     "killall -SIGINT sleep; sleep 0.1; kill -SIGINT <bash_PID>":
60    
61     23:48:32.376707 clone(...) = 13528
62     23:48:32.388706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
63     23:48:32.459761 --- SIGINT (Interrupt) @ 0 (0) ---
64     kill -SIGINT <bash_PID> is ignored, back to waiting:
65     23:48:32.463706 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13528
66     sleep exited with 0
67     23:48:37.377557 --- SIGCHLD (Child exited) @ 0 (0) ---
68     23:48:37.378451 clone(...) = 13538
69     23:48:37.390708 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13538
70     sleep was killed by "killall -SIGINT sleep"
71     23:48:38.523944 --- SIGCHLD (Child exited) @ 0 (0) ---
72     23:48:38.524861 clone(...) = 13542
73     23:48:38.538706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
74     23:48:38.624761 --- SIGINT (Interrupt) @ 0 (0) ---
75     kill -SIGINT <bash_PID> is ignored, back to waiting:
76     23:48:38.628706 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13542
77     sleep exited with 0
78     23:48:43.525674 --- SIGCHLD (Child exited) @ 0 (0) ---
79     23:48:43.526563 clone(...) = 13545
80     23:48:43.538709 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13545
81     sleep was killed by "killall -SIGINT sleep"
82     23:48:44.466848 --- SIGCHLD (Child exited) @ 0 (0) ---
83     23:48:44.467735 clone(...) = 13549
84     23:48:44.481706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
85     23:48:44.567757 --- SIGINT (Interrupt) @ 0 (0) ---
86     kill -SIGINT <bash_PID> is ignored, back to waiting:
87     23:48:44.571706 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13549
88     sleep exited with 0
89     23:48:49.468553 --- SIGCHLD (Child exited) @ 0 (0) ---
90     23:48:49.469445 clone(...) = 13551
91     23:48:49.481708 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13551
92     sleep was killed by "killall -SIGINT sleep"
93     23:48:50.515837 --- SIGCHLD (Child exited) @ 0 (0) ---
94     23:48:50.516718 clone(...) = 13555
95     23:48:50.530706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
96     23:48:50.615761 --- SIGINT (Interrupt) @ 0 (0) ---
97     kill -SIGINT <bash_PID> is ignored, back to waiting:
98     23:48:50.619705 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13555
99     sleep was killed by "killall -SIGINT sleep".
100     This is the second one in a row. Kill ourself:
101     23:48:51.504604 kill(13515, SIGINT) = 0
102     23:48:51.504689 --- SIGINT (Interrupt) @ 0 (0) ---
103     23:48:51.504915 +++ killed by SIGINT +++
104    
105     As long as there is at least one "sleep 5" which exited successfully
106     (not killed by SIGINT), bash continues. This is not documented anywhere
107     AFAIKS.
108    
109     Why keyboard ^C acts differently?
110    
111     00:08:07.655985 clone(...) = 14270
112     00:08:07.669707 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 14270
113     00:08:12.656872 --- SIGCHLD (Child exited) @ 0 (0) ---
114     00:08:12.657743 clone(...) = 14273
115     00:08:12.671708 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 14273
116     00:08:13.810778 --- SIGINT (Interrupt) @ 0 (0) ---
117     00:08:13.818705 kill(14269, SIGINT) = 0
118     00:08:13.820103 --- SIGINT (Interrupt) @ 0 (0) ---
119     00:08:13.820925 +++ killed by SIGINT +++
120    
121     Perhaps because at the moment bash got SIGINT it had no children?
122     (it did not manage to spawn new sleep yet, see the trace)