Por que o bash sai imediatamente ao aguardar a conclusão de um comando e recebe o SIGHUP para o qual uma armadilha foi configurada?

1

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.

  1. 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?

  2. 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?

    
por Tim 28.05.2018 / 00:03

0 respostas