Ubuntu no está enviando SIGTERM al apagar

18

Estoy empezando a sospechar que Ubuntu no le está diciendo a las aplicaciones en ejecución que se está cerrando para que puedan salir correctamente, sino que las obliga a abandonar.

Si dejo cromo abierto cuando lo cierro dice que no se cerró correctamente la última vez que lo abro después del inicio, LibreOffice no me pregunta si quiero guardar mi documento y estoy haciendo una aplicación que necesita ejecutar algún código al salir, pero no está permitido hacerlo cuando la computadora se apaga.

Según lo he entendido, SIGTERM se envía primero a todos los procesos para permitirles salir limpiamente y, si no salen, se envía SIGKILL para obligarlos a abandonar. Parece que Ubuntu no envía SIGTERM en absoluto o no da a las aplicaciones suficiente tiempo antes de enviar SIGKILL.

¿Hay alguna manera de solucionarlo?

Estoy ejecutando Ubuntu 16.04 pero el problema también existía en 15.10. No puedo decir si estuvo allí antes desde que comencé a usar Ubuntu cuando 15.10 era la versión más nueva.

Editar: uso Unity y apago mi computadora presionando el engranaje en la esquina superior derecha y seleccionando apagar, aunque el problema es el mismo si ejecuto sudo halt en el terminal.

Editar: Estoy observando el mismo comportamiento cuando solo estoy desconectado. Supongo que se supone que la señal se envía al desconectarse y, por lo tanto, el problema surge al apagar y cerrar la sesión.

    
pregunta GKraft 13.06.2016 - 09:39

3 respuestas

1

Desafortunadamente, no funciona de esta manera. Muchos de esos programas que realmente tienen un manejador de señal, no bloquean la señal para mostrar un diálogo de confirmación. El manejo de señales a menudo es mínimo o falta.

Puedes probarlo sin tener que apagarlo. Simplemente envíe SIGTERM a su proceso de ejecución de Firefox o LibreOffice:

$ pkill firefox

Normalmente, Firefox podría preguntarte si realmente deseas cerrarlo. Además, generalmente tarda un tiempo en cerrarse, especialmente cuando lleva funcionando mucho tiempo y utiliza más de 1 GB de RAM; a menudo el proceso tarda aproximadamente un minuto en finalizar después de que se cerró la última ventana. Nada de esto sucede cuando envía SIGTERM, el proceso acaba de terminar instantáneamente.

Sin embargo, algunos entornos de escritorio cierran todas las ventanas abiertas antes de apagarse. A diferencia de SIGTERM, cerrar una ventana mediante programación es como hacer clic en el botón X de esa ventana, o Alt + F4 . Esto también es lo que hace el script en la otra respuesta: usa wmctrl para cerrar todas las ventanas abiertas con gracia.

Cuando se cierra una ventana, el programa no está apurado y puede cerrar todo dentro de esa ventana, por ejemplo abrir pestañas, y también puede mostrar una ventana de diálogo si hay trabajos no guardados. Una vez que se han cerrado todas las ventanas abiertas de una aplicación, el proceso generalmente termina poco después.

Depende de su entorno de escritorio (suponiendo que usa su entorno de escritorio para apagar y no sudo poweroff ). Por ejemplo, KDE debe esperar que las ventanas abiertas se cierren antes de apagarse, mientras que MATE no.

Línea inferior: cierre todas las ventanas abiertas manualmente antes de apagar. O use un entorno de escritorio que espere a que se cierren todas las ventanas.

    
respondido por el c0xc 02.08.2016 - 12:04
0

Por lo que vale, hace algún tiempo, encontré este procedimiento en el foro de Manjaro:

close_apps () {
WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
for i in $WIN_IDs; do wmctrl -ic "$i"; done

# Keep checking and waiting until all windows are closed
while [ "$WIN_IDs" != "" ]; do
        sleep 0.1;
        WIN_IDs=$(wmctrl -l | grep -vwE "Desktop$|xfce4-panel$" | cut -f1 -d' ')
done

}

Puedes invocarlo en un script propio para cerrar todas las aplicaciones abiertas antes de que se apague (o reiniciar).

El único problema es que fue creado para Xfce, por lo tanto, necesita cambios que Unity DE impone. Un poco de ayuda de alguien más informado entraría muy bien aquí para ayudar a resolver el problema de OP.

    
respondido por el S.R. 28.06.2016 - 02:19
0

En realidad, una parte del script que cierra todas las ventanas y no depende de ningún DE en particular está disponible en Ask. Las respuestas 2ª y 3ª son particularmente útiles. Con solo unas pocas líneas más, y al crear un iniciador en el panel o en el escritorio, puede lograr el apagado elegante que funciona en el DE que está utilizando.

Cómo cerrar todas las ventanas abiertas correctamente

    
respondido por el S.R. 12.08.2016 - 18:07

Lea otras preguntas en las etiquetas