Когда вы входите на удаленный компьютер, sshd выделяет псевдо-терминал и запускает оболочку входа. Любые запускаемые вами процессы, фоновые или передние, являются дочерними процессами этой оболочки. (Прочтите "fork", "parent process" и "child process"; используйте команду "pstree", чтобы посмотреть состояние системы.)
Если вы отключитесь, например, закрыв свой клиент, sshd закроет псевдотерминал. Это (косвенно, чтение «управляющего терминала» и «лидера сеанса») завершит процесс оболочки, что приведет к тому, что его дочерние элементы будут либо завершены, либо, поскольку их родительский элемент теперь отсутствует, будут переопределены init
. (Прочтите «Сигнал HUP» - должно быть в зависимости от того, какие материалы клемм вы найдете - и nohup
команду.)
Когда вы подключаетесь снова, sshd выделяет новый псевдо-терминал и запускает новый экземпляр вашей оболочки входа в систему. Не существует механизма, позволяющего подключить ранее запущенные процессы - при условии, что они все еще работают - к этой оболочке (если бы она существовала, то каждой программе когда-либо приходилось бы знать, как обращаться со спонтанно появляющимися дочерними процессами, которые могут захотеть использовать стандарт вход / выход и т. д .; «оболочка» - это особый процесс только для вас, пользователя, а не для системы).
Единственный способ сделать это - использовать программу наподобие screen
или tmux
(могут быть и другие). По сути, это серверный процесс, который управляет своими собственными псевдо-терминалами с помощью оболочек и всего остального, а также клиентский процесс, который может отображать вам содержимое этих ptys и отправлять ваши данные им; при отключении этот клиентский процесс умирает, но при повторном подключении вы можете запустить новый - сервер все еще будет работать.
(Выше приведены некоторые упрощения, но это должно помочь вам понять, что на самом деле происходит. Читайте «псевдо-терминал».)