Modifiquei o script responsável por enviar o sinal de interrupção com atraso alocado, /etc/init.d/sendsigs, e reduzi o tempo necessário para eliminar os processos restantes em 2 iterações. Saudável ou não, ele faz o trabalho no meu sistema e não está mais pendurado no desligamento e na reinicialização.
Abaixo está uma parte do /etc/init.d/sendsigs com modificação indicada por # <---:
# Kill all processes.
log_action_begin_msg "Asking all remaining processes to terminate"
killall5 -15 $OMITPIDS # SIGTERM
log_action_end_msg 0
alldead=""
OMITPIDS0="$OMITPIDS"
#for seq in 1 2 3 4 5 6 7 8 9 10; do # this is the original line
for seq in 1 2; do # <--- the above line is replaced by this one.
depois, na parte inferior do script:
# Upstart has a method to set a kill timeout and so the job author
# may want us to wait longer than 10 seconds (as in the case of
# mysql). (LP: #688541)
#
# We will wait up to 300 seconds for any jobs in stop/killed state.
# Any kill timeout higher than that will be overridden by the need
# to shutdown. NOTE the re-use of seq from above, since we already
# waited up to 10 seconds for them.
while [ -n "$(upstart_killed_jobs)" ] ; do
seq=$(($seq+1))
#if [ $seq -ge 300 ] ; then # this is the original line
if [ $seq -ge 2 ] ; then # <--- I can't wait for another 300 iteration
break
fi
NOTA: Essa pode não ser a melhor solução, pois o script original está funcionando em outros sistemas, para sistemas como o meu, onde várias soluções sugeridas não se aplicaram - é isso que posso compartilhar, considerando que estou executando o sistema apenas como uma estação de trabalho sem serviços críticos em execução após fechar todos os aplicativos da área de trabalho que utilizo antes de clicar no ícone de desligar ou reiniciar.
O sistema em uso é um laptop Asus X550DP.
sudo shutdown -h now
e ver se está completamente desligado.