ssh
(наряду с эмуляторами терминала, screen
, tmux
, script
и некоторыми другими программами) использует объект, называемый "псевдо-tty" (или "pty"), который ведет себя как модемное соединение. Я описываю это так, потому что это историческое происхождение этого поведения: если вы по какой-то причине потеряли модемное соединение, драйвер tty (или pty) обнаружил потерю носителя и отправил SIGHUP
("Hangup
") вашему сессия. Это позволяет программам сохранять свое состояние (например, vi
/ vim
сохранит все файлы, которые вы изменили, но не сохранили для восстановления), и аккуратно завершит работу. Точно так же, если сетевое соединение по какой-то причине обрывается (кто-то споткнулся о шнур питания или сетевой кабель? ... или sssh
сброшенное ядро по какой-то нечетной причине), pty отправляет SIGHUP
в ваш сеанс, чтобы получить шанс сохранить любые несохраненные данные.
Технически, драйвер tty / pty отправляет сигнал каждому процессу в группе процессов, подключенной к терминалу (группы процессов также связаны с управлением заданиями оболочки, но это было их первоначальной целью). Некоторые другие сигналы терминала обрабатываются таким же образом, например Ctrl + C отправляет SIGINT
и Ctrl + \ отправляет SIGQUIT
(и Ctrl + Z отправляет SIGTSTP
, а программы, которые не обрабатывают SIGTSTP
путем приостановки, отправляют SIGSTOP
; этот двойной сигнал позволяет vim
верните терминал из режима редактирования в обычный режим и во многих эмуляторах терминала переключитесь в буфер предварительного редактирования экрана).