SIGTERM não está funcionando ocasionalmente

3

Nós usamos o /etc/init.d/jboss stop regular para parar o jboss em nossas máquinas. Mas, às vezes, isso não impede o processo e obtemos o que é colado abaixo. Quando isso acontece, eliminamos o processo com um kill -9 . Isso poderia ser um bug no código do aplicativo ou poderia ser um problema no nível do SO que pode ser corrigido?

waiting for processes to stop/usr/local/jboss/bin/run.sh

waiting for processes to stop/usr/local/jboss/bin/run.sh

waiting for processes to stop/usr/local/jboss/bin/run.sh
/usr/local/jboss/bin/run.sh

Timeout: Shutdown command was sent, but process is still running with PID 7252
[root@mercury02 ~]#  

P.S: Eu abri o arquivo /etc/init.d/jboss e, como esperado, ele tenta enviar kill -15 ao usar stop .

    
por Sree 02.12.2014 / 18:57

1 resposta

5

Não é bem assim que o SIGTERM não está funcionando, é que o aplicativo não reage do jeito que você está esperando. Geralmente, o objetivo de capturar o SIGTERM é fazer alguma limpeza, como sincronizar dados para o disco, etc., antes de sair.

Não há exigência forçada, no entanto, de que o processo realmente saia, portanto, se algo der errado durante o que quer que seja em resposta, não.

SIGKILL ( kill -9 ), por outro lado, não pode ser capturado e deve forçar o processo a parar a menos que por alguma razão muito incomum ele seja ininterrupto (uma razão que não poderia produzir voluntariamente) . O problema com isso é que o processo não pode reagir e fazer pequenas coisas que ele precisa fazer antes de desligar. Isso pode significar que ele deixou dados no disco em um estado inconsistente, etc.

Assim, a maneira normal e preferida de matar um processo é SIGTERM. Somente se isso falhar você deve recorrer ao SIGKILL e, nesse caso, você deve se perguntar por que é necessário, porque um aplicativo que funcione corretamente não deve precisar disso. Em outras palavras ...

Could this be a bug in the application code

Sim.

    
por 02.12.2014 / 20:28