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

How to Run Linux Commands in Background

22 Января 2020 | Терминал

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

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

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

Tmux 

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


Вывод 

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

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


    Комментарии

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

Загрузка комментариев...