Observações
-
ctrl+cenviaSIGINTpara o processo fg no Terminal 1 - portanto, executar
kill -2 <PID>no Terminal 2 é o mesmo que baterctrl+cno Terminal 1 - fazendo um dos dois pontos acima antes executando
kill -10 <PID>no Terminal 2 manipulaSIGINTcorretamente - executá-lo após executar
kill -10 <PID>no Terminal 2 (enviar sinalSIGUSR1) não manipulaSIGINTcorretamente e leva ao comportamento problemático - A substituição de
kill -2 <PID>no Terminal 2 (SIGINT) porkill -15 <PID>(SIGTERM) oukill -9 <PID>(SIGKILL) leva sempre a corrigir a manipulação de sinal. - a execução de
kill -10 <PID>no Terminal 2 interrompe owaitincorporado, mas não sai do loop, poistesté imediatamente impressa após o sinalSIGUSR1ser interceptado e o loop continuar. - O envio de
SIGINTirrompe do loop de execução e congela o shell ou nunca interrompewaite permanece em espera / congelado.
Conclusão
SIGINT não foi encontrado e manipulado corretamente ou é ignorado após a interceptação manual de SIGUSR1 ou talvez de qualquer outra interceptação definida pelo usuário. Isso significa que o processo ainda existe e é por isso que ele consome / aquece a CPU ou congela o shell. A execução de kill -15 <PID> ou kill -9 <PID> do Terminal 2 encerra / mata o processo e devolve o controle sobre o Terminal 1 e relaxa sua CPU.
Por que esse problema ocorre, ainda permanece um mistério, mas espero que alguém possa explicar exatamente o que está realmente acontecendo atrás das cortinas.