WikiDer > Nohup - Википедия

nohup - Wikipedia

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

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

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

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

Использовать

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

$ nohup abcd &$ выход

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

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

$ nohup приятно abcd &

Реализации

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

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

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

Преодоление зависания

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

$ nohup ./myprogram> foo.out 2> foo.err &

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

Альтернативы

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

использованная литература

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

внешние ссылки