5

nohup делает процесс невосприимчивым к SIGHUP оболочки, но даже если я запускаю это из своей оболочки:

bash -c 'while true; do sleep 1; date; done' >& nohup.out &

затем выйдите из системы и войдите снова, bash все еще работает и выдает выходные данные в nohup.out. Есть ли разница? Надежнее ли полагаться только на перенаправление?

2 ответа2

5

В bash фоновые задания не нуждаются в защите nohup

В зависимости от вашей версии bash, поведение может быть изменено. В разделе СИГНАЛЫ страницы руководства

Если параметр оболочки huponexit был установлен с помощью shopt, bash отправляет SIGHUP всем работам при выходе из интерактивной оболочки входа в систему.

Опция huponexit по умолчанию выключена

1

nohup позволяет отключить выполнение от оболочки,

Nohuping фоновые задания обычно используются, чтобы избежать их завершения при выходе из удаленного сеанса SSH. Другая проблема, которая часто возникает в этой ситуации, заключается в том, что ssh отказывается выходить из системы ("зависает"), так как он отказывается потерять любые данные из / в фоновое задание (задания).

Эта проблема также может быть преодолена путем перенаправления всех трех потоков ввода / вывода:
nohup ./myprogram > foo.out 2> foo.err < /dev/null &

Еще одна ссылка на случай зависания SSH.

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