Как запускать команды Linux в фоновом режиме

Обычно, когда вы запускаете команду в терминале, вам нужно дождаться завершения команды, прежде чем вы сможете ввести другую. Это называется запуском команды в процессе переднего плана или переднего плана. Когда процесс выполняется на переднем плане, он занимает вашу оболочку, и вы можете взаимодействовать с ним, используя устройства ввода.

Что делать, если выполнение команды занимает много времени, а вы тем временем хотите выполнить другие команды? В вашем распоряжении несколько вариантов. Самый очевидный и простой вариант — запустить новый сеанс оболочки и запустить в нем команду. Другой вариант — запустить команду в фоновом режиме.

Фоновый процесс — это процесс / команда, который запускается с терминала и выполняется в фоновом режиме без взаимодействия с пользователем.

В этой статье мы поговорим о фоновых процессах 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

Переместить процесс переднего плана на задний план

Чтобы переместить запущенный процесс переднего плана в фоновый режим:

  1. Остановите процесс, нажав Ctrl+Z
  2. Переместите остановленный процесс на задний план, набрав bg .

Сохранение фоновых процессов после выхода из оболочки

Если ваше соединение разрывается или вы выходите из сеанса оболочки, фоновые процессы прекращаются. Есть несколько способов сохранить выполнение процесса после завершения сеанса интерактивной оболочки.

Один из способов — удалить задание из управления заданиями оболочки с помощью встроенной команды disown shell:

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'

Если вы выйдете из системы или закроете терминал, процесс не завершится.

Альтернативы

Существует ряд программ, позволяющих проводить несколько интерактивных сеансов одновременно.

Экран

Экран или GNU Screen — это программа-мультиплексор терминала, которая позволяет запускать сеанс экрана и открывать любое количество окон (виртуальных терминалов) внутри этого сеанса. Процессы, запущенные в Screen, будут продолжать работать, если их окно не отображается, даже если вы отключитесь.

Tmux

Tmux — это современная альтернатива GNU screen. С помощью Tmux вы также можете создать сеанс и открыть несколько окон внутри этого сеанса. Сеансы Tmux являются постоянными, что означает, что программы, запущенные в Tmux, продолжают работать, даже если вы закроете терминал.

Выводы

Чтобы запустить команду в фоновом режиме, включите & в конце команды.

Когда вы запускаете команду в фоновом режиме, вам не нужно ждать ее завершения, прежде чем вы сможете выполнить другую.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Оставьте комментарий