O teste não é um simples teste "o comando foi bem-sucedido". Quando um processo sai com SIGINT, seu status de saída pode ser lido por wait(2)
. Usando WIFSIGNALED
e WTERMSIG
, o bash pode dizer se o processo filho (neste caso, o sudo) foi morto diretamente pelo sinal ou não.
Veja o resultado da chamada do sistema ao pressionar Ctrl + C em cat
(de acordo com strace
):
wait4(-1, [{WIFSIGNALED(s) && WTERMSIG(s) == SIGINT}], 0, NULL) = 9357
E aqui está o resultado ao pressionar Ctrl + C em sudo -S sleep 4
:
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 1}], 0, NULL) = 9479
Apenas para completar, aqui está o resultado de Ctrl + C'ing ping localhost
:
wait4(-1, [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0, NULL) = 9710