Modifiqué el script responsable de enviar la señal de interrupción con el retraso asignado, /etc/init.d/sendsigs, y reduje la cantidad de tiempo que lleva eliminar los procesos restantes en 2 iteraciones. Saludable o no, hace el trabajo en mi sistema y ya no se cuelga al apagar y reiniciar.
A continuación se muestra una parte de /etc/init.d/sendsigs con la modificación 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.
luego en la parte inferior del guión:
# 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: Esta puede no ser la mejor solución ya que el script original está funcionando en otros sistemas, para aquellos sistemas como el mío donde no se aplicaron varias soluciones sugeridas; esto es lo que puedo compartir considerando que solo estoy ejecutando el sistema como una estación de trabajo sin servicios críticos que se ejecutan después de cerrar todas las aplicaciones de escritorio que uso antes de hacer clic en el icono de apagado o reinicio.
El sistema en uso es una computadora portátil Asus X550DP.
sudo shutdown -h now
y ver si se apaga por completo.