Команда nohup в Linux

Команда 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.out . Этот файл создается в текущем рабочем каталоге . Если пользователь, выполняющий команду, не имеет прав на запись в рабочий каталог, файл создается в домашнем каталоге пользователя.

Если вы выйдете из системы или закроете терминал, процесс не завершится.

Запуск команды в фоновом режиме

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

Чтобы запустить команду в фоновом режиме , добавьте символ & в конце команды:

nohup mycommand &

Вывод включает идентификатор задания оболочки (в скобках) и идентификатор процесса:

[1] 25177

Вы можете использовать идентификатор задания, чтобы вывести команду на передний план с помощью команды fg .

Если по какой-то причине вы хотите прервать процесс, используйте команду kill за которой следует идентификатор процесса:

kill -9 25132

Перенаправление вывода в файл

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

Например, чтобы перенаправить стандартный вывод и стандартную ошибку на mycommand.out вы должны использовать:

nohup mycommand > mycommand.out 2>&1 &

Чтобы перенаправить стандартный вывод и стандартную ошибку в разные файлы:

nohup mycommand > mycommand.out 2> mycommand.err &

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

Есть несколько альтернативных программ, которые можно использовать, чтобы избежать завершения команды при закрытии терминала или отключении.

Screen

Экран или GNU Screen — это программа-мультиплексор терминала, которая позволяет запускать сеанс экрана и открывать любое количество окон (виртуальных терминалов) внутри этого сеанса. Процессы, запущенные в Screen, будут продолжать работать, если их окно не отображается, даже если вы отключитесь.

Tmux

Tmux — это современная альтернатива экрану GNU. С помощью Tmux вы также можете создать сеанс и открыть несколько окон внутри этого сеанса. Сеансы Tmux являются постоянными, что означает, что программы, запущенные в Tmux, будут продолжать работать, даже если вы закроете терминал.

disown

disown — это встроенная оболочка, которая удаляет задание оболочки из управления заданиями оболочки. В отличие от nohup , вы также можете использовать disown для запущенных процессов.

Выводы

nohup позволяет предотвратить завершение выполнения команд при выходе из системы или выходе из терминала.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий