Est-il dangereux de fermer une window de terminal sans quitter correctement une application?

En utilisant Ubuntu 12.04 LTS, ma question est que si j'ai démarré une application dans une window de terminal, y a-t-il quelque chose de mal à fermer la window du terminal sans sortir de l'application correctement. Par exemple, j'utilise MATLAB. J'ouvre un terminal et je tape

matlab -nodisplay -nodesktop -nosplash 

et ensuite exécuter un tas de scripts. Alors je peux soit

 exit 

pour terminer MATLAB, fermez la window du terminal ou fermez simplement la window du terminal. Quelle est la différence entre ces deux methods? La deuxième méthode est-elle en quelque sorte «nuisible» à quelque chose? La première méthode est-elle préférée? Pourquoi?

En général, cela devrait être bien de le faire de cette façon.

Lorsque vous click le "X" pour fermer la window du terminal, c'est envoyer un "signal" de votre bureau (GNOME, KDE, etc.) à l'application du terminal, en lui disant de se fermer. Comme vous exécutez MATLAB dans ce shell, il est considéré comme un process enfant pour l'application du terminal.

Donc, une partie des responsabilités d'être un process parent, c'est que vous envoyez à votre tour ce même «signal» proche à vos enfants.

Maintenant, si vous comprenez conceptuellement ce que je viens d'expliquer alors substituons un peu plus de la terminologie réelle.

les signaux

Tout d'abord avec le "signal", il existe en fait toute une famille de signaux différents que vous pouvez envoyer aux process Unix. Pour restr simple, il y en a 4 que vous verrez souvent, SIGHUP , SIGTERM , SIGINT et SIGKILL .

  • SIGHUP

    Le signal SIGHUP est envoyé à un process lorsque son terminal de contrôle est fermé. Il a été conçu à l'origine pour informer le process d'une chute de ligne série. Dans les systèmes modernes, ce signal signifie généralement que le pseudo contrôle ou le terminal virtuel a été fermé.

  • SIGTERM

    Le signal SIGTERM est un signal générique utilisé pour provoquer la fin du programme. Contrairement à SIGKILL, ce signal peut être bloqué, manipulé et ignoré. C'est la façon normale de requestr poliment qu'un programme se termine.

  • SIGINT

    Le signal SIGINT ("interruption de programme") est envoyé lorsque l'user tape le caractère INTR (normalement Cc).

  • SIGKILL

    Le signal SIGKILL est utilisé pour provoquer la fermeture immédiate du programme. Il ne peut pas être manipulé ou ignoré, et est donc toujours fatal. Il est également impossible de bloquer ce signal.

Remarque: SIGINT est ce qui est envoyé lorsque vous utilisez Ctrl + C pour "casser" un programme à partir de la command line pendant qu'il est en cours d'exécution.

lequel est utilisé?

Le SIGTERM est probablement appelé par votre environnement de fenêtrage et transmis à votre terminal. Votre terminal est alors le plus susceptible d'envoyer SIGHUP à MATLAB. Ce signal donne à tous les process la possibilité d'effectuer eux-mêmes un nettoyage local (fermeture de files, process de fin, etc.).

command kill

Vous pouvez envoyer des signaux vous-même en utilisant la command mal nommée, kill . Donc, pour envoyer le signal SIGTERM à votre terminal ou le SIGHUP to MATLAB, you could determine their PID using ps`, puis exécuter cette command pour leur envoyer le signal:

 $ kill -SIGTERM <PID> 

ou ca:

 $ kill -SIGHUP <PID> 

Vous pouvez get une list complète des signaux en utilisant cette command:

 $ 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 ... ... 

Notez que les signaux ont des nombres? Vous verrez souvent les utiliser comme ça au lieu de par leurs noms:

 $ kill -15 <PID> 

Ou l'infâme -9 , qui peut tuer à peu près n'importe quel process.

Il est probablement correct, mais vous perdrez des données en fonction des applications que vous avez ouvertes. Par exemple, si vous avez un éditeur de file ouvert, vous risquez de perdre certaines de vos modifications si vous ne sauvegardez pas et quittez correctement. Si vous êtes inquiet, déconnectez / quittez le terminal correctement. Si vous n'aimez pas taper exit ou logout essayez Ctrl-D .