Na ausência de um manipulador de sinal, o SIGTERM se comporta de maneira idêntica ao SIGKILL?

3

A maioria das descrições de SIGTERM e SIGKILL apontam que SIGKILL,

In contrast to SIGTERM and SIGINT, [...] cannot be caught or ignored [...] (Wikipedia)

Esta é a única diferença entre SIGTERM e SIGKILL? Em particular, se um processo não instala um manipulador SIGTERM, existe alguma diferença entre enviar SIGTERM ou SIGKILL para o processo?

    
por user226927 14.04.2017 / 10:51

1 resposta

3

Na ausência de qualquer configuração de sinal, SIGTERM e SIGKILL são na prática equivalentes, pelo menos da perspectiva do processo eliminado, assim como os outros sinais cuja ação padrão é encerrar um processo, incluindo SIGUSR1 e %código%. Como aponta ilkkachu , o processo pai é informado do sinal que terminou o processo filho (que é como o seu shell pode distinguir entre os sinais e imprimir por exemplo “terminado” v. “sinal definido pelo usuário 1”).

Como mencionado na Wikipedia, SIGUSR2 não pode ser capturado ou ignorado, enquanto SIGKILL pode; note que isso significa que um processo não precisa instalar um manipulador para que SIGTERM seja ineficaz, ele pode simplesmente bloqueá-lo ou ignorá-lo (veja SIGTERM , sighold() e sigrelse() ).

POSIX como uma seção detalhada da justificativa do tratamento de sinal . A mana sigignore() documenta os sinais em detalhes também.

    
por 14.04.2017 / 11:19