mirror of
https://github.com/fish-shell/fish-shell.git
synced 2024-12-30 23:46:30 +08:00
1e858eae35
This demonstrates that we only write control sequences when interactive.
90 lines
1.9 KiB
Fish
90 lines
1.9 KiB
Fish
# RUN: env fth=%fish_test_helper %fish %s
|
|
|
|
set -g SIGUSR1_COUNT 0
|
|
|
|
function gotsigusr1
|
|
set -g SIGUSR1_COUNT (math $SIGUSR1_COUNT + 1)
|
|
echo "Got USR1: $SIGUSR1_COUNT"
|
|
|
|
end
|
|
|
|
function handle1 --on-signal SIGUSR1
|
|
gotsigusr1
|
|
end
|
|
|
|
function handle_us42 --on-signal SIGUSR2
|
|
end
|
|
|
|
kill -USR1 $fish_pid
|
|
sleep .1
|
|
#CHECK: Got USR1: 1
|
|
|
|
kill -USR1 $fish_pid
|
|
sleep .1
|
|
#CHECK: Got USR1: 2
|
|
|
|
kill -USR2 $fish_pid
|
|
sleep .1
|
|
kill -USR2 $fish_pid
|
|
sleep .1
|
|
|
|
# Previous signals do not re-trigger handlers.
|
|
functions --erase handle1
|
|
kill -USR1 $fish_pid
|
|
sleep .1
|
|
kill -USR1 $fish_pid
|
|
sleep .1
|
|
|
|
kill -USR2 $fish_pid
|
|
sleep .1
|
|
|
|
# Send the signal and immediately define the function; it should not excute.
|
|
kill -USR1 $fish_pid
|
|
function handle1 --on-signal SIGUSR1
|
|
gotsigusr1
|
|
end
|
|
echo "Hope it did not run"
|
|
#CHECK: Hope it did not run
|
|
|
|
kill -USR1 $fish_pid
|
|
sleep .1
|
|
#CHECK: Got USR1: 3
|
|
|
|
# We can trap SIGINT.
|
|
# Trapping it prevents exiting.
|
|
function handle_int --on-signal SIGINT
|
|
echo Got SIGINT
|
|
end
|
|
kill -INT $fish_pid
|
|
#CHECK: Got SIGINT
|
|
|
|
# In non-interactive mode, we have historically treated
|
|
# a child process which dies with SIGINT as if we got SIGINT.
|
|
# However in this case we don't execute handlers; we just don't exit.
|
|
$fth sigint_self
|
|
echo "Should not have exited"
|
|
#CHECK: Should not have exited
|
|
|
|
# If a signal is received while handling a signal, that is deferred until the handler is done.
|
|
set -g INTCOUNT 0
|
|
function handle_int --on-signal SIGINT
|
|
test $INTCOUNT -gt 2 && return
|
|
set -g INTCOUNT (math $INTCOUNT + 1)
|
|
echo "start handle_int $INTCOUNT"
|
|
sleep .1
|
|
kill -INT $fish_pid
|
|
echo "end handle_int $INTCOUNT"
|
|
end
|
|
kill -INT $fish_pid
|
|
# CHECK: start handle_int 1
|
|
# CHECK: end handle_int 1
|
|
# CHECK: start handle_int 2
|
|
# CHECK: end handle_int 2
|
|
# CHECK: start handle_int 3
|
|
# CHECK: end handle_int 3
|
|
|
|
# Remove our handler and SIGINT ourselves. Now we should exit.
|
|
functions --erase handle_int
|
|
kill -INT $fish_pid
|
|
echo "I should not run"
|