aboutsummaryrefslogtreecommitdiff
path: root/shell/ash_doc.txt
diff options
context:
space:
mode:
Diffstat (limited to 'shell/ash_doc.txt')
-rw-r--r--shell/ash_doc.txt77
1 files changed, 73 insertions, 4 deletions
diff --git a/shell/ash_doc.txt b/shell/ash_doc.txt
index d8a48c114..2aa44434c 100644
--- a/shell/ash_doc.txt
+++ b/shell/ash_doc.txt
@@ -46,8 +46,77 @@ done
46of exiting. (true) in subshell does not seem to matter, as another user 46of exiting. (true) in subshell does not seem to matter, as another user
47reports the same with: 47reports the same with:
48 48
49while true 49trap "echo USR1" USR1
50do 50while true; do
51 echo Kill me 51 echo Sleeping
52 sleep 1 52 sleep 5
53done 53done
54
55Compat note.
56Bash version 3.2.0(1) exits this script at the receipt of SIGINT
57_only_ if it had two last children die from it.
58The following trace was obtained while periodically running
59"killall -SIGINT sleep; sleep 0.1; kill -SIGINT <bash_PID>":
60
6123:48:32.376707 clone(...) = 13528
6223:48:32.388706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
6323:48:32.459761 --- SIGINT (Interrupt) @ 0 (0) ---
64 kill -SIGINT <bash_PID> is ignored, back to waiting:
6523:48:32.463706 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13528
66 sleep exited with 0
6723:48:37.377557 --- SIGCHLD (Child exited) @ 0 (0) ---
6823:48:37.378451 clone(...) = 13538
6923:48:37.390708 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13538
70 sleep was killed by "killall -SIGINT sleep"
7123:48:38.523944 --- SIGCHLD (Child exited) @ 0 (0) ---
7223:48:38.524861 clone(...) = 13542
7323:48:38.538706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
7423:48:38.624761 --- SIGINT (Interrupt) @ 0 (0) ---
75 kill -SIGINT <bash_PID> is ignored, back to waiting:
7623:48:38.628706 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13542
77 sleep exited with 0
7823:48:43.525674 --- SIGCHLD (Child exited) @ 0 (0) ---
7923:48:43.526563 clone(...) = 13545
8023:48:43.538709 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13545
81 sleep was killed by "killall -SIGINT sleep"
8223:48:44.466848 --- SIGCHLD (Child exited) @ 0 (0) ---
8323:48:44.467735 clone(...) = 13549
8423:48:44.481706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
8523:48:44.567757 --- SIGINT (Interrupt) @ 0 (0) ---
86 kill -SIGINT <bash_PID> is ignored, back to waiting:
8723:48:44.571706 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 13549
88 sleep exited with 0
8923:48:49.468553 --- SIGCHLD (Child exited) @ 0 (0) ---
9023:48:49.469445 clone(...) = 13551
9123:48:49.481708 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 13551
92 sleep was killed by "killall -SIGINT sleep"
9323:48:50.515837 --- SIGCHLD (Child exited) @ 0 (0) ---
9423:48:50.516718 clone(...) = 13555
9523:48:50.530706 waitpid(-1, 0xffc832ec, 0) = ? ERESTARTSYS (To be restarted)
9623:48:50.615761 --- SIGINT (Interrupt) @ 0 (0) ---
97 kill -SIGINT <bash_PID> is ignored, back to waiting:
9823: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:
10123:48:51.504604 kill(13515, SIGINT) = 0
10223:48:51.504689 --- SIGINT (Interrupt) @ 0 (0) ---
10323:48:51.504915 +++ killed by SIGINT +++
104
105As long as there is at least one "sleep 5" which exited successfully
106(not killed by SIGINT), bash continues. This is not documented anywhere
107AFAIKS.
108
109Why keyboard ^C acts differently?
110
11100:08:07.655985 clone(...) = 14270
11200:08:07.669707 waitpid(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 14270
11300:08:12.656872 --- SIGCHLD (Child exited) @ 0 (0) ---
11400:08:12.657743 clone(...) = 14273
11500:08:12.671708 waitpid(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0) = 14273
11600:08:13.810778 --- SIGINT (Interrupt) @ 0 (0) ---
11700:08:13.818705 kill(14269, SIGINT) = 0
11800:08:13.820103 --- SIGINT (Interrupt) @ 0 (0) ---
11900:08:13.820925 +++ killed by SIGINT +++
120
121Perhaps because at the moment bash got SIGINT it had no children?
122(it did not manage to spawn new sleep yet, see the trace)