ash: fix signal and "set -e" interaction

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2010-09-25 17:15:13 +02:00
parent 5b3151c201
commit b563f62bbb
5 changed files with 58 additions and 6 deletions

View File

@@ -0,0 +1,3 @@
Removing traps
End of exit_func
Done: 0

View File

@@ -0,0 +1,18 @@
"$THIS_SH" -c '
exit_func() {
echo "Removing traps"
trap - EXIT TERM INT
echo "End of exit_func"
}
set -e
trap exit_func EXIT TERM INT
sleep 2
exit 77
' &
sleep 1
# BUG: ash kills -PGRP, but in non-interactive shell we do not create pgrps!
# In this case, bash kills by PID, not PGRP.
kill -TERM %1
wait
echo Done: $?

View File

@@ -0,0 +1,3 @@
Removing traps
End of exit_func
Done: 0

View File

@@ -0,0 +1,21 @@
# Note: the inner script is a test which checks for a different bug
# (ordering between INT handler and exit on "set -e"),
# but so far I did not figure out how to simulate it non-interactively.
"$THIS_SH" -c '
exit_func() {
echo "Removing traps"
trap - EXIT TERM INT
echo "End of exit_func"
}
set -e
trap exit_func EXIT TERM INT
sleep 2
exit 77
' &
child=$!
sleep 1
kill -TERM $child
wait
echo Done: $?