Как сохранить процесс запущенным после закрытия терминала в Linux

by itisgood

Вопрос

Я запустил команду в сеансе ssh и хотел бы, чтобы она работала даже после выхода из сеанса ssh.

Есть ли способ предотвратить завершение процесса после выхода из сеанса, выполняющего этот процесс?

Ответ

Есть два способа сделать это:

  • nohup – запустить новый процесс, который может работать в фоновом режиме даже после закрытия терминала.
  • disown – Может использоваться, когда процесс уже запущен, и вы не использовали nohup для его запуска.

Давайте рассмотрим простой пример длинной команды, такой как «sleep», чтобы проверить оба параметра.

Использование nohup

Синтаксис использования команды nohup:

# nohup [command] > /tmp/command.out 2>&1

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

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

Например:

# nohup sleep 4
appending output to nohup.out

Вы также можете запустить команду в фоновом режиме вместе с параметром nohup, если хотите получить доступ к терминалу.

Например:

# nohup sleep 100 &

Использование disown

Выполните следующие шаги, если эта команда уже запущена без nohup:

1. Предположим, что вы выполнили команду «sleep 100» без nohup, как показано ниже:

# sleep 100

2. Нажмите Ctrl + Z, чтобы остановить команду и получить доступ к оболочке.

Выполните команду bg в командной строке для отправки команды в фоновом режиме.

Запишите идентификатор задания соответствующей команды.

3. Предотвратите SIGHUP соответствующей команде при выходе из оболочки.

Используйте синтаксис ниже:

# disown -h [job-ID]

Например, в нашем случае у нас есть идентификатор задания 1, поэтому команда будет:

# disown -h %1
 

You may also like

Leave a Comment