
Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все сигналы SIGHUP (зависание). SIGHUP — это сигнал, который отправляется процессу при закрытии его управляющего терминала.
Обычно при запуске программы по SSH, если соединение обрывается или вы выходите из системы, сеанс завершается, и все процессы, запущенные в терминале, останавливаются. В этом случае пригодится команда nohup . Она игнорирует все сигналы зависания, и процесс продолжает выполняться.
Как использовать команду nohup
Синтаксис команды nohup следующий:
nohup COMMAND [ ARGS ]
Команда не принимает никаких других параметров, кроме стандартных --help и --version .
Давайте рассмотрим следующий пример:
nohup mycommand
nohup: ignoring input and appending output to 'nohup.out'
nohup запускает команду mycommand в фоновом режиме и перенаправляет вывод команды в файл nohup.out . Этот файл создаётся в текущем рабочем каталоге . Если у пользователя, запускающего команду, нет прав на запись в рабочий каталог, файл создаётся в домашнем каталоге пользователя.
Если вы выйдете из системы или закроете терминал, процесс не завершится.
Выполнение команды в фоновом режиме
Использование nohup на переднем плане не очень полезно, поскольку вы не сможете взаимодействовать с оболочкой, пока команда не завершится.
Чтобы запустить команду в фоновом режиме , добавьте символ & в конец команды:
nohup mycommand &
Вывод включает идентификатор задания оболочки (в скобках) и идентификатор процесса:
[1] 25177
Вы можете использовать идентификатор задания, чтобы вывести команду на передний план с помощью команды fg .
Если по какой-то причине вы хотите завершить процесс, используйте команду kill , указав за ней идентификатор процесса:
kill -9 25132
Перенаправление вывода в файл
По умолчанию nohup перенаправляет вывод команды в файл nohup.out . Если вы хотите перенаправить вывод в другой файл, используйте стандартное перенаправление оболочки.
Например, чтобы перенаправить стандартный вывод и стандартную ошибку в mycommand.out , можно использовать:
nohup mycommand > mycommand.out 2>&1 &
Чтобы перенаправить стандартный вывод и стандартные ошибки в разные файлы:
nohup mycommand > mycommand.out 2> mycommand.err &
Альтернативы
Существует несколько альтернативных программ, которые можно использовать, чтобы избежать завершения команды при закрытии терминала или отключении от сети.
Экран
Screen или GNU Screen — это программа-мультиплексор терминала, позволяющая запускать сеанс Screen и открывать в нём любое количество окон (виртуальных терминалов). Процессы, запущенные в Screen, продолжат работу, даже если их окна не видны, даже если соединение прервётся.
Тмукс
Tmux — это современная альтернатива GNU screen. С помощью Tmux вы также можете создать сеанс и открыть в нём несколько окон. Сеансы Tmux являются постоянными, то есть программы, запущенные в Tmux, продолжат работу даже после закрытия терминала.
Отказаться
disown — встроенная функция оболочки, которая удаляет задание из списка управления заданиями. В отличие от nohup , disown можно использовать и для запущенных процессов.
Заключение
nohup позволяет предотвратить завершение команд при выходе из системы или выходе из терминала.
Если у вас есть вопросы или пожелания, не стесняйтесь оставлять комментарии.
Связанные руководства