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