ноуп
Разработчик(и) | Различные с открытым исходным кодом и коммерческие разработчики разработчики |
---|---|
Операционная система | Unix , Unix-подобные , IBM i |
Платформа | Кросс-платформенный |
Тип | Команда |
nohup — это команда POSIX , которая означает «не зависать». Его цель — выполнить команду, игнорирующую сигнал HUP (зависание) и, следовательно, не останавливающуюся при выходе пользователя из системы.
Вывод, который обычно поступает на терминал, попадает в файл с именем nohup.out , если он еще не был перенаправлен.
Использовать
[ редактировать ]Первая из приведенных ниже команд запускает программу abcd
в фоновом режиме таким образом, чтобы последующий выход из системы не остановил его.
$ nohup abcd &
$ exit
Обратите внимание, что эти методы не позволяют процессу отправлять сигнал «стоп» при выходе из системы, но если ввод/вывод поступает для этих стандартных файлов ввода-вывода (stdin, stdout или stderr), они все равно зависают терминал. [ 1 ] См. Преодоление зависания ниже.
nohup часто используется в сочетании с командой nice для запуска процессов с более низким приоритетом.
$ nohup nice abcd &
Реализации
[ редактировать ]Некоторые оболочки (например, bash ) предоставляют встроенную оболочку , которую можно использовать для предотвращения SIGHUP отправки или распространения на существующие задания, даже если они не были запущены с помощью nohup. В bash это можно получить, используя disown -h job
; использование той же встроенной функции без аргументов удаляет задание из таблицы заданий, что также означает, что задание не получит сигнал. Перед использованием disown
при активной работе его следует остановить Ctrl-Z
, и продолжился на заднем плане bg
команда. [ 2 ] Другой подходящий вариант bash: shopt huponexit
, который автоматически отправляет сигнал HUP заданиям при нормальном выходе оболочки. [ 3 ]
и имеют Solaris AIX Версии nohup для -p
опция, которая изменяет запущенный процесс, чтобы он игнорировал будущие сигналы SIGHUP. В отличие от вышеописанного disown
встроенная функция bash, nohup -p
принимает идентификаторы процессов. [ 4 ]
The Команда nohup также была перенесена в операционную систему IBM i . [ 5 ]
Преодоление зависания
[ редактировать ]Обратите внимание, что фоновые задания nohupping обычно используются, чтобы избежать их завершения при выходе из удаленного 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 не отправлялся при завершении сеанса.
Ссылки
[ редактировать ]- ^ «Re: nohup/отключиться и выйти из системы» . Zsh.org. 7 февраля 2005 г. Архивировано из оригинала 18 мая 2009 г. Проверено 10 июня 2009 г.
- ^ Справочное руководство Bash. Архивировано 3 декабря 2010 г. на Wayback Machine . Гну.орг. Проверено 13 апреля 2015 г.
- ^ Справочное руководство Bash. Архивировано 3 декабря 2010 г. на Wayback Machine . Гну.орг. Проверено 13 апреля 2015 г.
- ^ Центр знаний IBM . Архивировано 15 октября 2014 г. на Wayback Machine . 01.ibm.com (26 марта 2015 г.). Проверено 13 апреля 2015 г.
- ^ ИБМ . «Программирование Qshell в IBM System i версии 7.2» (PDF) . ИБМ . Проверено 05 сентября 2020 г.
- ^ «Часто задаваемые вопросы по SSH» . Snailbook.com. Архивировано из оригинала 22 января 2009 г. Проверено 10 июня 2009 г.
- ^ «Часто задаваемые вопросы по OpenSSH» . Openssh.com. 20 сентября 2005 г. Архивировано из оригинала 10 июля 2009 г. Проверено 10 июня 2009 г.
- ^ «Ошибка 396 – процессы sshd прерываются, если не выделен pty» . Bugzilla.mindrot.org . Проверено 10 июня 2009 г.