Do manual do Bash
If Bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes.
When Bash is waiting for an asynchronous command via the wait builtin, the reception of a signal for which a trap has been set will cause the wait builtin to return immediately with an exit status greater than 128, immediately after which the trap is executed.
Eu criei algumas experiências para a primeira frase.
Em um shell executado em uma guia no lxterminal:
$ trap "echo hello" HUP
$ sleep 100
Em seguida, fecho a janela da guia clicando no ícone "x", para enviar SIGHUP para o shell.
O shell sai imediatamente, em vez de esperar por sleep 100
para
completo e, em seguida, executando a interceptação. Eu estava me perguntando por que? Eu
perder alguma coisa?
Este aqui funciona
$ trap -p
trap -- 'echo hello' SIGHUP
$ echo $$
19708
$ sleep 100
Em seguida, execute a partir de outra guia do lxterminal:
$ kill -HUP 19708
$
Quando o comando sleep na primeira guia for concluído:
$ sleep 100
hello
Obrigado.
Relacionadas Ao digitar ctrl-c em um terminal, por que o trabalho em primeiro plano não é terminado até que seja concluído?