Android

Команда Linux nohup

Using nohup to allows jobs to continue on logout

Using nohup to allows jobs to continue on logout

Оглавление:

Anonim

Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все сигналы SIGHUP (зависание). SIGHUP - это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.

Обычно, когда вы запускаете программу по SSH, если ваше соединение прерывается или вы выходите из системы, сеанс завершается, и все процессы, выполняемые с терминала, останавливаются. Вот где команда nohup пригодится. Он игнорирует все сигналы зависания, и процесс продолжится.

Как использовать команду nohup

Синтаксис команды nohup следующий:

nohup COMMAND

Команда не принимает никаких других опций, кроме стандартных --help и --version .

Давайте посмотрим на следующий пример:

nohup mycommand

nohup: ignoring input and appending output to 'nohup.out'

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

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

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

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

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

nohup mycommand &

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

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 - встроенная оболочка, которая удаляет задание оболочки из управления заданиями оболочки. В отличие от nohup , вы также можете использовать disown при запуске процессов.

Вывод

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

терминал nohup