Разработчик (и) | Различные разработчики с открытым исходным кодом и коммерческие разработчики |
---|---|
Операционная система | Unix, Unix-подобная, IBM i |
Тип | Команда |
nohup - это команда POSIX для игнорирования сигнала HUP (зависание). Сигнал HUP - это, по соглашению, способ, которым терминал предупреждает зависимые процессы о выходе из системы.
Вывод, который обычно поступает на терминал, попадает в файл с именем nohup.out, если он еще не был перенаправлен.
Первое из приведенные ниже команды запускают программу abcd
в фоновом режиме таким образом, что последующий выход из системы не останавливает ее.
$ nohup abcd $ exit
Обратите внимание, что эти методы предотвращают отправку процессу сигнала остановки при выходе из системы, но если ввод / вывод поступает для этих стандартных файлов ввода-вывода (stdin, stdout, или stderr), они все равно будут вешать терминал. См. Раздел «Преодоление зависания» ниже.
nohup часто используется в сочетании с командой nice для запуска процессов с более низким приоритетом.
$ nohup nice abcd
Некоторые оболочки (например, bash ) предоставляют встроенную оболочку , которая может использоваться для предотвращения SIGHUP отправляется или распространяется на существующие задания, даже если они не были запущены с помощью nohup. В bash это можно получить с помощью disown -h job
; использование той же встроенной функции без аргументов удаляет задание из таблицы заданий, что также означает, что задание не получит сигнал. Прежде чем использовать disown
для активного задания, его следует остановить с помощью Ctrl-Z
и продолжить в фоновом режиме командой bg
. Другой подходящей опцией bash является huponexit
, который автоматически отправляет сигнал HUP заданиям при нормальном завершении работы оболочки.
AIX и Solaris В версиях nohup есть опция -p
, которая изменяет запущенный процесс, чтобы игнорировать будущие сигналы SIGHUP. В отличие от описанного выше disown
, встроенного в bash, nohup -p
принимает идентификаторы процессов.
Команда nohup также была перенесена в Операционная система IBM i.
Обратите внимание, что фоновые задания без поддержки обычно используются, чтобы избежать их завершения при выходе из системы с удаленного SSH сессия. Другая проблема, которая часто возникает в этой ситуации, заключается в том, что ssh отказывается выходить из системы («зависает»), так как он отказывается терять любые данные из / в фоновые задания. Эту проблему также можно решить, перенаправив все три потока ввода-вывода:
$ nohup./myprogram>foo.out 2>foo.err < /dev/null
Также обратите внимание, что закрытие сеанса SSH не всегда отправлять сигнал HUP зависимым процессам. Среди прочего, это зависит от того, был ли выделен псевдотерминал или нет.
$ screen -A -m - d -S somename./somescript.sh