Не вредно ли закрывать окно терминала без надлежащего выхода из приложения?

С помощью Ubuntu 12.04 LTS, мой вопрос заключается в том, что если я запустил приложение в окне терминала, то есть ли что-то плохое о просто закрытии окна терминала, не выходя из приложения должным образом в первую очередь. Например, я использую MATLAB. Я открываю терминал и набираю

matlab -nodisplay -nodesktop -nosplash 

а затем запустить кучу скриптов. Тогда я могу либо

 exit 

для завершения MATLAB, а затем закройте окно терминала или просто закройте окно терминала. В чем разница между этими двумя методами? Второй способ каким-то образом «вредит»? Является ли первый метод предпочтительным? Зачем?

В общем, это должно быть хорошо, чтобы сделать это таким образом.

Когда вы нажимаете «X», чтобы закрыть окно терминала, оно отправляет «сигнал» с вашего рабочего стола (GNOME, KDE и т. Д.) В приложение терминала, говоря ему, чтобы он закрылся. Поскольку вы используете MATLAB в этой оболочке, это считается дочерним процессом для приложения терминала.

Таким образом, часть обязанностей родительского процесса заключается в том, что вы, в свою очередь, отправляете этот же близкий «сигнал» своим детям.

Теперь, если вы поняли концептуально то, что я только что объяснил, давайте заменим немного больше реальной терминологии.

сигналы

Во-первых, с «сигналом», на самом деле существует целый ряд различных сигналов, которые вы можете отправлять в Unix-процессы. Чтобы это было просто, есть 4, которые вы часто увидите, SIGHUP , SIGTERM , SIGINT и SIGKILL .

  • SIGHUP

    Сигнал SIGHUP посылается процессу, когда его управляющий терминал закрыт. Первоначально он был предназначен для уведомления о сбое последовательной линии. В современных системах этот сигнал обычно означает, что управление псевдо-или виртуальным терминалом было закрыто.

  • SIGTERM

    Сигнал SIGTERM является общим сигналом, используемым для выключения программы. В отличие от SIGKILL, этот сигнал может быть заблокирован, обработан и проигнорирован. Это обычный способ вежливо просить программу прекратить работу.

  • SIGINT

    Сигнал SIGINT («прерывание программы») отправляется, когда пользователь вводит символ INTR (обычно Cc).

  • SIGKILL

    Сигнал SIGKILL используется для немедленного завершения программы. Его нельзя обрабатывать или игнорировать, и поэтому он всегда фатален. Также невозможно заблокировать этот сигнал.

ПРИМЕЧАНИЕ. SIGINT – это то, что отправляется, когда вы используете Ctrl + C для «разрыва» программы из командной строки, когда она находится в середине работы.

какой из них привыкает?

Скорее всего, SIGTERM вызывается вашей оконной средой и передается на ваш терминал. Тогда ваш терминал, скорее всего, отправит SIGHUP в MATLAB. Этот сигнал дает всем процессам возможность выполнять локальную очистку (закрытие файлов, завершение процессов и т. Д.).

команда kill

Вы можете сами посылать сигналы с помощью плохо названной команды, kill . Поэтому, чтобы отправить сигнал SIGTERM на ваш терминал или SIGHUP to MATLAB, you could determine their PID using ps`, а затем запустить эту команду, чтобы отправить им сигнал:

 $ kill -SIGTERM <PID> 

или это:

 $ kill -SIGHUP <PID> 

Вы можете получить полный список сигналов, используя эту команду:

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

Обратите внимание, что сигналы имеют номера? Вы часто будете видеть, как они используются так, а не их имена:

 $ kill -15 <PID> 

Или печально известный -9 , который может убить практически любой процесс.

Скорее всего, это нормально, но вы потеряете данные в зависимости от того, какие приложения вы открыли. Например, если у вас открыт редактор файлов, вы можете потерять некоторые из своих изменений, если вы не сохраните и не уйдете правильно. Если вы беспокоитесь, просто выйдите из терминала или выйдите из него. Если вам не нравится вводить exit или logout просто попробуйте Ctrl-D .