Nohup - Википедия - nohup
Разработчики) | Различный Открытый исходный код и коммерческий Разработчики |
---|---|
Операционная система | 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 dev / null &
Также обратите внимание, что закрывающий сеанс SSH не всегда отправляет сигнал HUP зависимым процессам. Среди прочего, это зависит от того, псевдотерминал было выделено или нет.[8]
Альтернативы
- А оконечный мультиплексор может запускать команду в отдельном сеансе, отсоединенном от текущего терминала, что означает, что, если текущий сеанс завершается, отсоединенный сеанс и связанные с ним процессы продолжают работать. Позже можно повторно подключиться к сеансу.
- Например, следующий вызов экран запустит somescript.sh в фоновом режиме отдельного сеанса:
$ экран -A -m -d -S какое-то имя ./somescript.sh &
- В отречься Команда используется для удаления заданий из таблицы заданий или для пометки заданий, чтобы сигнал SIGHUP не отправлялся при завершении сеанса.
использованная литература
- ^ "Re: nohup / disown и выход". Zsh.org. 2005-02-07. В архиве из оригинала 18.05.2009. Получено 2009-06-10.
- ^ Справочное руководство по Bash В архиве 2010-12-03 на Wayback Machine. Gnu.org. Проверено 13 апреля 2015.
- ^ Справочное руководство по Bash В архиве 2010-12-03 на Wayback Machine. Gnu.org. Проверено 13 апреля 2015.
- ^ Центр знаний IBM В архиве 2014-10-15 на Wayback Machine. 01.ibm.com (26 марта 2015 г.). Проверено 13 апреля 2015.
- ^ IBM. "Qshell для программирования IBM System i версии 7.2" (PDF). Получено 2020-09-05.
- ^ «Часто задаваемые вопросы по SSH». Snailbook.com. В архиве из оригинала от 22.01.2009. Получено 2009-06-10.
- ^ "OpenSSH FAQ". Openssh.com. 2005-09-20. Архивировано из оригинал на 2009-07-10. Получено 2009-06-10.
- ^ «Ошибка 396 - sshd теряет процессы, когда не выделяется pty». Bugzilla.mindrot.org. Получено 2009-06-10.