¿Es perjudicial cerrar una ventana de terminal sin salir correctamente de una aplicación?

18

Con Ubuntu 12.04 LTS, mi pregunta es que si inicié una aplicación en una ventana de terminal, ¿hay algo malo en cerrar la ventana de terminal sin salir primero de la aplicación correctamente? Por ejemplo, yo uso MATLAB. Abro una terminal y escribo

matlab -nodisplay -nodesktop -nosplash

y luego ejecuta un montón de scripts. Entonces yo puedo

exit

para finalizar MATLAB y luego cerrar la ventana de terminal o simplemente cerrar la ventana de terminal. ¿Cuál es realmente la diferencia entre estos dos métodos? ¿El segundo método de alguna manera "daña" algo? ¿Se prefiere el primer método? ¿Por qué?

Punto fijo
fuente

Respuestas:

22

En general, esto debería estar bien hacerlo de esta manera.

Cuando hace clic en la "X" para cerrar la ventana del terminal, se está enviando una "señal" desde su escritorio (GNOME, KDE, etc.) a la aplicación del terminal, diciéndole que se apague. Como está ejecutando MATLAB en este shell, se considera un proceso secundario para la aplicación de terminal.

Entonces, parte de las responsabilidades de ser un proceso de padres, es que a su vez envíe esta misma "señal" cercana a sus hijos.

Ahora, si entiendes conceptualmente lo que acabo de explicar, entonces sustituyamos un poco más de la terminología real.

señales

Primero con la "señal", en realidad hay toda una familia de señales diferentes que puede enviar a los procesos de Unix. Para hacerlo simple, hay 4 que en general se ven, SIGHUP, SIGTERM, SIGINT, y SIGKILL.

  • VISTA

    La señal SIGHUP se envía a un proceso cuando su terminal de control está cerrado. Originalmente fue diseñado para notificar el proceso de una caída de línea en serie. En los sistemas modernos, esta señal generalmente significa que se ha cerrado el pseudo o terminal virtual de control.

  • SIGTERM

    La señal SIGTERM es una señal genérica utilizada para causar la terminación del programa. A diferencia de SIGKILL, esta señal se puede bloquear, manejar e ignorar. Es la forma normal de pedir cortésmente que un programa finalice.

  • SIGINT

    La señal SIGINT ("interrupción del programa") se envía cuando el usuario escribe el carácter INTR (normalmente Cc).

  • SIGKILL

    La señal SIGKILL se usa para causar la terminación inmediata del programa. No puede ser manejado o ignorado, y por lo tanto siempre es fatal. Tampoco es posible bloquear esta señal.

NOTA: SIGINT es lo que se envía cuando usa Ctrl+ Cpara "interrumpir" un programa de la línea de comando mientras está en la mitad de la ejecución.

¿Cuál se está acostumbrando?

Lo más probable SIGTERMes que su entorno de ventanas lo llame y lo transmita a su terminal. Es probable que su terminal se envíe SIGHUPa MATLAB. Esta señal le da a todos los procesos la oportunidad de hacer cualquier limpieza local (cerrar archivos, finalizar procesos, etc.) ellos mismos.

comando de matar

Puede enviar señales a sí mismo utilizando el comando mal llamada, kill. Entonces, para enviar la SIGTERMseñal a su terminal o SIGHUP to MATLAB, you could determine their PID usingps 'y luego ejecutar este comando para enviarles la señal:

$ kill -SIGTERM <PID>

o esto:

$ kill -SIGHUP <PID>

Puede obtener una lista completa de las señales con este comando:

$ kill -l
 1) SIGHUP   2) SIGINT   3) SIGQUIT  4) SIGILL   5) SIGTRAP
 6) SIGABRT  7) SIGBUS   8) SIGFPE   9) SIGKILL 10) SIGUSR1
11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM
...
...

¿Te das cuenta de que las señales tienen números? Muchas veces los verás usados ​​así en lugar de por sus nombres:

$ kill -15 <PID>

O el infame -9, que puede matar casi cualquier proceso.

slm
fuente
Siempre pensé que esos números eran negativos, pero en realidad son argumentos de línea de comandos. Aprendí algo nuevo: D
Thomas
1
HUP - HangUP - es la señal que se envía si "pierde la línea" para un terminal, por ejemplo, si se conectó a un servidor Unix por módem. Es probablemente la señal más "suave" que termina un proceso. La mayoría de los demonios no saldrán, sino que volverán a leer sus archivos de configuración en HUP. El comando nohup le permite dejar que un proceso en segundo plano continúe después de que se cierre el shell. Los comandos como la pantalla sobreviven al bloqueo y aíslan los comandos de HUP.
Baard Kopperud
@BaardKopperud: gracias, intencionalmente dejé fuera a HUP, no quería confundir la discusión.
slm
@BaardKopperud - Creo que lo que estás señalando es esto: "La señal SIGHUP se envía a un proceso cuando su terminal de control está cerrado. Fue diseñado originalmente para notificar el proceso de una caída de línea en serie. En los sistemas modernos, esta señal generalmente significa que se ha cerrado el pseudo o terminal virtual de control "Admito que mentí un poco en mi descripción pero estaba tratando de mantenerlo simple.
slm
@BaardKopperud: me sentí culpable, así que modifiqué mi respuesta para reflejar con mayor precisión lo que está sucediendo. ¡Gracias!
slm
2

Lo más probable es que esté bien, pero perderá datos dependiendo de las aplicaciones que tenga abiertas. Por ejemplo, si tiene abierto un editor de archivos, puede perder algunos de sus cambios si no guarda y sale correctamente. Si está preocupado, simplemente cierre sesión / salga de la terminal correctamente. Si no te gusta escribir exito logoutsimplemente prueba Ctrl-D.

marca
fuente
¿Por qué sería eso mejor? La aplicación recibirá SIGHUP en lugar de SIGTERM, pero todavía se está matando por una señal, por lo que no lo llamaría exactamente "guardar y salir correctamente"
Michael Mrozek
En cuanto a Ctrl-Deso, eso solo se aplica en el símbolo del sistema.
Mark