7

У меня есть экземпляр AWS, и у меня есть несколько задач, которые мне нужно выполнить, что займет некоторое время.

Если я выполню их до коммутирования на работу и обратно (например, wget <someStuff>), затем передам его в фоновый режим Ctrl Z » bg чтобы убедиться, что он запускается правильно), а затем выйду из сеанса SSH, будет ли команда wget выполняться в фоновом режиме?

Или это заканчивается с моим закрытием сессии?

2 ответа2

10

Просто поместив его в фоновый режим, вы не останетесь в фоновом режиме после выхода из сеанса ssh.

Фоновая обработка просто отсоединяет трубу стандартного stdin от консоли. Процесс все еще является дочерним процессом процесса оболочки, например, bash . Стандартная процедура в Linux/UNIX состоит в том, что завершение родительского процесса оболочки изящно заставляет все дочерние процессы получать сигнал SIGHUP . Почти все стандартные процессы будут обрабатывать этот сигнал как запрос на завершение процесса, хотя процесс может игнорировать сигнал SIGHUP и продолжать работу. Это может также сделать что-то совершенно иное, например, включить микроволновую печь, заставить ровер на луне сверлить в землю, завести машину или удалить все файлы в системе. Это сигнал, означающий, что это просто тип консультативной команды, отправляемой процессу. Процесс может делать с этим все, что захочет.

Это то, что вам нужно понять: поскольку обработка SIGHUP эквивалентна сообщению «пожалуйста, прекратите свою программу сейчас», что-то может легко проигнорировать этот "хороший запрос" и продолжить работу. Таким образом, есть несколько специализированных программ, которые специально разработаны, чтобы позволить процессу продолжаться, даже если оболочка завершается. Когда соединение SSH разъединяет, кстати, процесс оболочки не прекращается , как часть вашей последовательности выхода из системы.

screen GNU - одна из таких команд; nohup это другое. screen более гибок в целом и очень полезен для этой конкретной задачи. bg не подходит, потому что дочерний процесс будет "соблюдать" SIGHUP, если он не включен в процесс, предназначенный для игнорирования SIGHUP, например screen . nohup - это самый основной процесс игнорирования SIGHUP, так как это в основном его единственная функциональность, кроме записи выходных данных дочернего процесса в файл.

Также посмотрите этот вопрос, который в основном является точной копией, но на ServerFault.

3

В частности, Wget автоматически продолжит работу в фоновом режиме, если вы просто закроете сеанс SSH без каких-либо дополнительных действий. Он даже создает файл wget-log , как будто вы запустили его с ключом -b .

Как правило, программы, которые останавливаются или работают в фоновом режиме, будут закрываться при закрытии сеанса SSH.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .