Запускаем команду Linux в фоновом режиме
Чтобы выполнить команду в фоновом режиме, добавьте символ амперсанда (&
) в конец команды:
command &
ID задания (окруженное скобками) и ID процесса напечатаются в терминале:
[1] 30431
В фоновом режиме можно запускать несколько процессов одновременно. В данном случае фоновый процесс будет продолжать писать сообщения в терминал, с которого вы вызвали команду. Для подавления сообщений stdout
и stderr
используйте следующий синтаксис:
command > /dev/null 2>&1 &
/dev/null 2>&1
означает перенаправление stdout
на /dev/null
и stderr
на stdout
.
Используйте утилиту jobs
для отображения статуса всех остановленных и фоновых заданий в текущем сеансе командной строки:
jobs -l
На выходе отображается номер задания, идентификатор процесса, состояние задания и команда, с помощью которой оно было запущено:
[1]+ 31102 Running ping devacademy.ru > /dev/null 2>&1 &
Чтобы вывести фоновый процесс на передний план, используйте команду fg
:
fg
Если у вас несколько фоновых заданий, укажите %
и ID задания после команды:
fg %1
Чтобы завершить фоновый процесс, используйте команду kill
, за которой следует ID процесса:
kill -9 31447
[1]+ Killed ping devacademy.ru > /dev/null 2>&1
Перенос процесса с переднего плана в фоновый режим
Перемещение выполняющегося процесса с переднего плана в фоновый режим:
- Остановите процесс, нажав
Ctrl+Z
. - Переместите остановленный процесс в фоновый режим, набрав
bg
.
Поддерживание фоновых процессов в рабочем состоянии после выхода оболочки
Если ваше соединение прервется или вы выйдете из сессии командной строки, фоновые процессы будут прерваны. Существует несколько способов сохранить процесс после завершения сеанса интерактивной оболочки. Один из способов — удалить задание из системы управления заданиями оболочки с помощью команды disown
:
disown
Если у вас несколько фоновых заданий, укажите % и ID задания после команды:
disown %1
Убедитесь, что задание удалено из таблицы активных заданий с помощью команды jobs -l
. Чтобы перечислить все запущенные процессы, включая процессы, от которых отказались, воспользуйтесь командой ps aux
. Другой способ сохранить процесс запущенным после выхода из оболочки — использовать nohup
.
Команда nohup
выполняет другую команду, указанную в качестве аргумента, и игнорирует все сигналы SIGHUP (зависание). SIGHUP — это сигнал, посылаемый на процесс, когда его управляющая оболочка закрыта.
Чтобы выполнить команду в фоновом режиме с помощью команды nohup
, введите ее:
nohup command &
Вывод команды перенаправляется в файл nohup.out
.
nohup: ignoring input and appending output to 'nohup.out'
Если вы выйдете из системы или закроете терминал, процесс не будет завершен.
Автор статьи: devacademy.ru — Павел Соловьёв