Просто поместив его в фоновый режим, вы не останетесь в фоновом режиме после выхода из сеанса ssh.
Фоновая обработка просто отсоединяет трубу стандартного stdin
от консоли. Процесс все еще является дочерним процессом процесса оболочки, например, bash
. Стандартная процедура в Linux/UNIX состоит в том, что завершение родительского процесса оболочки изящно заставляет все дочерние процессы получать сигнал SIGHUP
. Почти все стандартные процессы будут обрабатывать этот сигнал как запрос на завершение процесса, хотя процесс может игнорировать сигнал SIGHUP и продолжать работу. Это может также сделать что-то совершенно иное, например, включить микроволновую печь, заставить ровер на луне сверлить в землю, завести машину или удалить все файлы в системе. Это сигнал, означающий, что это просто тип консультативной команды, отправляемой процессу. Процесс может делать с этим все, что захочет.
Это то, что вам нужно понять: поскольку обработка SIGHUP эквивалентна сообщению «пожалуйста, прекратите свою программу сейчас», что-то может легко проигнорировать этот "хороший запрос" и продолжить работу. Таким образом, есть несколько специализированных программ, которые специально разработаны, чтобы позволить процессу продолжаться, даже если оболочка завершается. Когда соединение SSH разъединяет, кстати, процесс оболочки не прекращается , как часть вашей последовательности выхода из системы.
screen
GNU - одна из таких команд; nohup
это другое. screen
более гибок в целом и очень полезен для этой конкретной задачи. bg
не подходит, потому что дочерний процесс будет "соблюдать" SIGHUP, если он не включен в процесс, предназначенный для игнорирования SIGHUP, например screen
. nohup
- это самый основной процесс игнорирования SIGHUP, так как это в основном его единственная функциональность, кроме записи выходных данных дочернего процесса в файл.
Также посмотрите этот вопрос, который в основном является точной копией, но на ServerFault.