При выходе из оболочки системы Linux все запущенные процессы обычно завершаются или зависают. Но что делать, если вы хотите, чтобы процессы работали даже при выходе из оболочки/терминала? В этом вам поможет команда nohup.
Nohup — это сокращение от no hangup. Эта команда поддерживает в системах Linux работу процессов даже после выхода из оболочки или терминала. Она предотвращает получение процессами или заданиями сигнала SIGHUP (Signal Hang UP). Это сигнал, который отправляется процессу при закрытии или выходе из терминала. В этом руководстве мы рассмотрим команду nohup и покажем, как ее можно использовать.
Синтаксис команды nohup
Синтаксис команды выглядит следующим образом:
nohup command arguments
Или так:
nohup options
Давайте же посмотрим, как работает данная команда.
Проверка версии nohup
Вы можете начать с проверки версии Nohup, используя приведенный ниже синтаксис.
nohup --version
Запуск процесса с помощью Nohup
Если вы хотите, чтобы ваши процессы/задания работали даже после закрытия терминала, укажите необходимую команду в nohup, как показано ниже. Задания будут по-прежнему выполняться и не будут уничтожены при выходе из оболочки или терминала.
nohup ./hello.sh
Согласно приведенному выше выводу результат команды был сохранен в nohup.out. Чтобы убедиться в этом, запустите:
cat nohup.out
Кроме того, вы можете перенаправить вывод в другой файл, как показано ниже.
nohup ./hello.sh > output.txt
Чтобы просмотреть этот файл, введите:
cat output.txt
Чтобы перенаправить в файл и стандартную ошибку, и вывод, используйте атрибут > filename 2>&1, как показано ниже.
nohup ./hello.sh > myoutput.txt >2&1
Запуск процесса в фоновом режиме
Чтобы запустить процесс в фоновом режиме, используйте символ & в конце команды. В этом примере мы пингуем google.com и отправляем этот процесс в фоновый режим.
nohup ping google.com &
Чтобы проверить процесс при возобновлении работы оболочки, используйте команду pgrep, как показано ниже.
pgrep -a ping
Если вы хотите остановить или убить запущенный процесс, используйте команду kill, за которой укажите идентификатор процесса, как показано ниже.
kill 2565
Заключение
Все процессы, запущенные с помощью команды nohup, будут игнорировать сигнал SIGHUP даже после выхода из оболочки.
Как только задание запущено с помощью команды nohup, стандартный ввод будет недоступен для пользователя.
По умолчанию nohup.out используется как стандартный файл для stdout и stderr.
Читайте также: Использование команды Fuser в Linux