Quando um subshell é inserido, as armadilhas que não estão sendo ignoradas devem ser definidas para as ações padrão
Fonte: https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_28
Aparentemente, isso também é verdade para programas externos que estou chamando do meu shell. trap "" SIGNAL
funciona para interceptar (ignorar) esse sinal. Mas trap action SIGNAL
não chama action
, não faz nada e o tratamento do sinal parece estar definido para o padrão original.
Onde esse comportamento é definido?
trap
é um built-in do shell que fornece uma interface parasignal()
/sigaction()
. O comportamento do comando externo wrt a esse respeito é o mesmo que em outros idiomas em que você altera a disposição do sinal.Quando você executa outro comando por meio da
execve()
chamada do sistema, a memória do processo, incluindo o código, incluindo o código do manipulador de sinal, é apagada para ser substituída pelo do novo executável, portanto, não há como os manipuladores de sinal sobreviverem.POSIX diz sobre
execve()
:trap '' NAL
define aSIG_IGN
disposição do sinal etrap - NAL
SIG_DFL
.trap
tem requisitos adicionais (muitos dos quais podem ser vistos como limitações e que algumas implementações de shell ignoram):