Безопасно ли закрывать оболочку, просто нажав «X» или используя «ctrl + d»?

11

Безопасно ли закрывать оболочку, просто нажав «X» или используя «ctrl + d» при входе в систему от имени пользователя root с помощью su, или безопаснее закрыть ее, набрав «exit»? Есть ли какая-либо разница (в плане безопасности) или она одинакова, и не имеет значения, какой способ вы используете?

pootzko
источник

Ответы:

13

Ctrl-D или exitто же самое.

Если вы используете «X», оконный менеджер отправляет сигнал завершения в оболочку. Который имеет в итоге тот же результат. Если оболочка не реагирует, пользователь обычно получает предупреждение и затем может принудительно завершить работу оболочки (равно kill -9 $PID).

Существует одно небольшое различие между «X» и методом выхода, если вы используете в zshкачестве оболочки: если у вас запущен фоновый процесс, exit/ ctrl-D в первый раз выдает только предупреждающее сообщение «у вас запущены задания», второй раз оболочка закрыта. При нажатии кнопки «X» оболочка немедленно завершается без каких-либо предупреждений.

jofel
источник
5
Также есть разница в bash. Если вы нажмете Ctrl + D, то все процессы, связанные с фоном &, останутся запущенными Если вы "X", то они будут прекращены.
Патрик
3
@ Патрик, похоже, это зависит от эмулятора терминала, а не от оболочки. Если эмулятор явно не убивает фоновые процессы, насколько я знаю, bash не отправит им SIGHUP независимо от того, как вы выйдете. Я только что попробовал это на Mac OS X 10.7.3. Терминал не убивает фоновые процессы, а Xterm (работает в X11). Я не знаю, является ли это поведением Xterm конкретно или X11 вообще.
Крис Пейдж
@jofel это не правда, см. мой ответ.
Патрик
@ Патрик спасибо за указание на это. Я отредактирую или удалю свой ответ.
Джофель
@jofel Нет, не удаляйте, информация о Zsh все еще полезна. Я только нуб на Zsh, поэтому я не могу комментировать там. Но это поднимает хороший вопрос, поэтому я отредактировал свой ответ, отметив, что разные оболочки могут вести себя по-разному, и описанное мной поведение по умолчанию зависит от bash, в то время как OP не определяет его оболочку.
Патрик
4

Закрытие эмулятора терминала - это не то же самое, что нажатие CTRL + D(если опция huponexitне установлена).

  • Когда вы закрываете терминал (нажимая «X»), эмулятор терминала отправляет SIGHUP в оболочку. Когда bash получает SIGHUP, он также отправляет SIGHUP на все ваши задания.

  • Когда вы выходите из терминала с помощью CTRL+Dили logoutили exit, оболочка выходит без отправки SIGHUP на все задания. Это поведение по умолчанию, но может быть изменен путем установки Баш shoptнастройки huponexit.

В конечном счете, если ваша цель - убедиться, что в фоновом режиме ничего не работает, нажмите «X».

,

Информация, предоставленная Джофелем в его комментарии, неверна (извините, Джофель). Эмулятор терминала не имеет ни малейшего представления, какие задания выполняются под оболочкой, поэтому он не может их завершить.

ПРИМЕЧАНИЕ .
Это поведение полностью зависит от оболочки. Вполне возможно, что разные оболочки имеют разные поведения по умолчанию.

Патрик
источник
Когда Ctrl+dпроцесс наследуется PPID 1 = systemd
EdiD
1

Нет никакой разницы. Настолько, что когда вы нажимаете ^ D, вы делаете то же самое, что и набираете «exit»:

$ su -
Password:
# [press ^D]
logout
Ренан
источник
Да, CTRL+Dи exitтак же, вопрос был о том, чтобы щелкнуть «X» оконного менеджера, чтобы закрыть окно, а не набирать текст exit:-)
Patrick