Этот вопрос возник довольно много (действительно много), но я нахожу ответы, как правило, неполными. Общий вопрос: «Почему моя работа не убивается, когда я выхожу / убиваю ssh?«И вот что я нашел. Первый вопрос: насколько общая информация следующая? Кажется, что следующее верно для современного Debian linux, но я упускаю некоторые моменты; и что нужно знать другим?
Все дочерние процессы, фоновые или нет оболочки, открытой через ssh-соединение, уничтожаются с помощью SIGHUP, когда ssh-соединение закрывается, только если установлена опция
huponexit
: запуститеshopt huponexit
чтобы проверить, верно ли это.Если
huponexit
имеет значение true, то вы можете использоватьnohup
илиdisown
чтобы отделить процесс от оболочки, чтобы он не был убит при выходе. Или запустить вещи сscreen
.Если
huponexit
имеет значение false, что является значением по умолчанию, по крайней мере, в некоторых linux в наши дни, то фоновые задания не будут уничтожены при обычном выходе из системы.Но даже если
huponexit
ложно, то если соединение SSH убивает, или капли (различные чем нормальный выход из системы), то фоновые процессы будут еще убить. Этого можно избежать с помощьюdisown
илиnohup
как в (2).Существует некоторое различие между (a) процессами, родительский процесс которых является терминалом, и (b) процессами, к которым подключен stdin, stdout или stderr. Я не знаю, что происходит с процессами, которые (а), а не (б), или наоборот.
Последний вопрос: как я могу избежать поведения (3)? Другими словами, по умолчанию в фоновых процессах Debian весело запускаются сами после выхода из системы, но не после разрыва соединения ssh. Мне бы хотелось, чтобы одно и то же происходило с процессами независимо от того, было ли соединение нормально закрыто или разорвано. Или это плохая идея?
Редактировать: Другой, важный способ сохранить рабочие места убитых, который работает (?) в любом случае это запустить их через экран. Но вопрос больше в том, чтобы понять, когда что-то убивают, а когда нет: иногда люди хотят, чтобы рабочие места были убиты, например, при выходе из системы.
Дополнительные темы:- Разъяснение сигналов (sighup), заданий и управляющего терминала - https://serverfault.com/questions/117152/do-background-processes-get-a-sighup-when-logging-off - Продолжить SSH фоновые задачи / задания при закрытии SSH - Будет ли задание, помещенное в фоновом режиме, продолжать работать после закрытия сеанса SSH? - Предотвратить остановку уже запущенного фонового процесса после закрытия клиента SSH. - Как я могу запустить процесс через SSH, чтобы он продолжал выполняться после моего отключения? - Невозможно сохранить удаленную работу на OS X - Закрыть SSH соединение