Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

Короче говоря, это означает, что не нужно отключаться.

Используйте [ редактировать ]

Первая из приведенных ниже команд запускает программу abcdв фоновом режиме таким образом, что последующий выход из системы не останавливает ее.

$ nohup abcd & $ exit

Обратите внимание, что эти методы предотвращают отправку процессу сигнала остановки при выходе из системы, но если ввод / вывод поступает для этих стандартных файлов ввода-вывода (stdin, stdout или stderr), они все равно будут вешать терминал. [1] См. Раздел « Преодоление зависания» ниже.

nohup часто используется в сочетании с командой nice для запуска процессов с более низким приоритетом.

$ nohup приятно abcd &

Реализации [ править ]

Некоторые оболочки (например, bash ) предоставляют встроенную оболочку, которая может использоваться для предотвращения отправки или распространения SIGHUP на существующие задания, даже если они не были запущены с помощью nohup. В bash это можно получить, используя disown -h job; использование той же встроенной функции без аргументов удаляет задание из таблицы заданий, что также означает, что задание не получит сигнал. Перед использованием disownв активном задании его следует остановить Ctrl-Zи продолжить в фоновом режиме bgкомандой. [2] Другой подходящей опцией bash является shopt huponexitавтоматическая отправка сигнала HUP заданиям при нормальном завершении работы оболочки. [3]

В версиях nohup для AIX и Solaris есть -pопция, которая изменяет запущенный процесс, чтобы игнорировать будущие сигналы SIGHUP. В отличие от описанной выше disownвстроенной функции bash, nohup -pпринимает идентификаторы процессов. [4]

Команда nohup также была перенесена в операционную систему IBM i . [5]

Преодоление зависания [ править ]

Обратите внимание, что фоновые задания без поддержки обычно используются, чтобы избежать их завершения при выходе из удаленного сеанса SSH . Другая проблема, которая часто возникает в этой ситуации, заключается в том, что ssh отказывается выходить из системы («зависает»), поскольку отказывается терять любые данные из / в фоновые задания. [6] [7] Эту проблему также можно решить, перенаправив все три потока ввода-вывода:

$ nohup ./myprogram> foo.out 2 > foo.err </ dev / null &

Также обратите внимание, что закрывающий сеанс SSH не всегда отправляет сигнал HUP зависимым процессам. Среди прочего, это зависит от того, был выделен псевдотерминал или нет. [8]

Альтернативы [ править ]

  • Оконечный мультиплексор может выполнить команду в отдельном сеансе, удаленную от текущего терминала, что означает , что , если текущий сеанс завершается, удаленные сессии и связанные с ней процессы , продолжают работать. Позже можно будет снова подключиться к сеансу.
Например, следующий вызов screen будет запускать somescript.sh в фоновом режиме отдельного сеанса:
$ screen -A -m -d -S somename ./somescript.sh &
  • Команда disown используется для удаления заданий из таблицы заданий или для пометки заданий, чтобы сигнал SIGHUP не отправлялся при завершении сеанса.

Ссылки [ править ]

  1. ^ "Re: nohup / disown и выход из системы" . Zsh.org. 2005-02-07. Архивировано 18 мая 2009 года . Проверено 10 июня 2009 . CS1 maint: обескураженный параметр ( ссылка )
  2. ^ Bash Reference Manual архивации 2010-12-03 в Wayback Machine . Gnu.org. Проверено 13 апреля 2015.
  3. ^ Bash Reference Manual архивации 2010-12-03 в Wayback Machine . Gnu.org. Проверено 13 апреля 2015.
  4. ^ Центр знаний IBM. Архивировано 15 октября 2014 г. на Wayback Machine . 01.ibm.com (26 марта 2015 г.). Проверено 13 апреля 2015.
  5. ^ IBM . «Qshell для программирования IBM System i версии 7.2» (PDF) . Проверено 5 сентября 2020 .
  6. ^ «Часто задаваемые вопросы по SSH» . Snailbook.com. Архивировано 22 января 2009 года . Проверено 10 июня 2009 . CS1 maint: обескураженный параметр ( ссылка )
  7. ^ "OpenSSH FAQ" . Openssh.com. 2005-09-20. Архивировано из оригинала на 2009-07-10 . Проверено 10 июня 2009 . CS1 maint: обескураженный параметр ( ссылка )
  8. ^ "Ошибка 396 - sshd теряет процессы, когда не выделяется pty" . Bugzilla.mindrot.org . Проверено 10 июня 2009 . CS1 maint: обескураженный параметр ( ссылка )

Внешние ссылки [ править ]

  • nohup из справочных страниц Solaris