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