nohup - nohup

редактировать
nohup
Разработчик (и) Различные разработчики с открытым исходным кодом и коммерческие разработчики
Операционная система Unix, Unix-подобная, IBM i
Тип Команда

nohup - это команда POSIX для игнорирования сигнала HUP (зависание). Сигнал HUP - это, по соглашению, способ, которым терминал предупреждает зависимые процессы о выходе из системы.

Вывод, который обычно поступает на терминал, попадает в файл с именем nohup.out, если он еще не был перенаправлен.

Содержание
  • 1 Использование
  • 2 Реализации
  • 3 Преодоление зависания
  • 4 Альтернативы
  • 5 Ссылки
  • 6 Внешние ссылки
Использование

Первое из приведенные ниже команды запускают программу 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 зависимым процессам. Среди прочего, это зависит от того, был ли выделен псевдотерминал или нет.

Альтернативы
  • A мультиплексор терминала может запускать команду в отдельном сеансе, отделенном от текущего терминал, что означает, что если текущий сеанс завершается, отключенный сеанс и связанные с ним процессы продолжают работать. Затем можно повторно подключиться к сеансу позже.
Например, следующий вызов screen запустит somescript.sh в фоновом режиме отдельного сеанса:
$ screen -A -m - d -S somename./somescript.sh
  • Команда disown используется для удаления заданий из таблицы заданий или для пометки заданий таким образом, чтобы сигнал SIGHUP не отправлялся при завершении сеанса.
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-31 11:44:57
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте