- Запуск команд Linux в фоновом режиме (+Видео)
- Видео
- Что такое приоритетный и фоновый режимы
- Как запустить команду в фоновом режиме
- Пример запуска команды в фоновом режиме
- Как вывести задание из фонового режима
- Просмотр заданий, работающих в фоновом режиме
- Перевод задания в фоновый режим
- Заключение
- Как управлять фоновыми процессами в Linux
- bg: перемещение задачи в фон
- Как сразу приступить к выполнению команды в фоне
- jobs: команда для проверки задач в текущем терминале
- kill% n: прекращение выполнения задания с идентификатором n
- fg: команда для перемещения задачи в интерактивный режим
- Команда ps позволяет увидеть все процессы
- Выводы
- Как запускать команды Linux в фоновом режиме
- How to Run Linux Commands in Background
- В этой статье мы поговорим о фоновых процессах Linux. Мы покажем вам, как запустить команду в фоновом режиме и как сохранить процесс работающим после закрытия сеанса оболочки.
- Запустите команду Linux в фоновом режиме
- Переместить процесс переднего плана в фон
- Поддерживать выполнение фоновых процессов после выхода из оболочки
- Альтернативы
- Screen
- Вывод
- Запустить процесс в фоне в Linux
- Запуск команд в фоновом режиме в Linux
- Найти команды, работающие в фоновом режиме в Linux
- Кончить выполнение команд, работающих в фоновом режиме
- Возврат програмки в приоритетный режим в Linux
Запуск команд Linux в фоновом режиме (+Видео)
В данной заметке мы рассмотрим, как запускать команды Linux в фоновом режиме. То есть, когда после запуска какой-либо команды, она начинает свою работу в фоне, а вы продолжаете работать в терминале.
Видео
Видео-версия. Наше видео про запуск команд в фоновом режиме.
Что такое приоритетный и фоновый режимы
Обычно все команды Linux запускаются в оболочке (в командной строке) в приоритетном режиме, называемом foreground. В этом режиме оболочка ожидает завершения работы команды, прежде чем пользователь сможет ввести новую команду.
Можно запускать команды Linux в фоновом режиме — background, при котором не нужно ожидать завершения команды, чтобы запустить другую команду.
Пользователь может запускать несколько команд в фоновом режиме одновременно. То есть эти команды будут выполняться параллельно. При этом окно терминала доступно для ввода новых команд.
Как запустить команду в фоновом режиме
Чтобы запустить команду в фоновом режиме, нужно в конец команды через пробел добавить знак амперсанда &
Синтаксис запуска команды в фоновом режиме можно записать следующим образом:
Пример запуска команды в фоновом режиме
Рассмотрим пример. Предположим, нам нужно распаковать большой tar-архив. Выполняем команду:
Распаковка архива выполняется в фоновом режиме, а мы можем вводить в терминале новые команды.
Как вы можете видеть, на экран выводятся символы [1] 7958
[1] — это номер, который оболочка назначила нашему фоновому заданию, чтобы мы могли идентифицировать его и управлять им (см. ниже как).
7958 — это идентификатор (PID) процесса, который был создан.
Как вывести задание из фонового режима
Если вы запустили один или несколько процессов в фоновом режиме, то вы можете подключиться к любому из них и вывести из фонового режима (перевести в приоритетный режим). Для этого используется команда fg
Команда fg , запущенная без аргументов, выводит из фонового режима последний запущенный фоновый процесс.
Например, запустим две команды в фоновом режиме и выполним команду fg . В результате мы выведем вторую команду из фонового режима.
Можно указать номер конкретного задания, которое нужно вывести из фонового режима:
Просмотр заданий, работающих в фоновом режиме
Для просмотра заданий, работающих в фоновом режиме, используется команда jobs
Символом плюс + помечается последнее запущенное задание. Если использовать команду fg без аргументов, то она будет применена именно к этому заданию.
Символом минус — помечается задание, которое было запущено перед последним.
Перевод задания в фоновый режим
Чтобы перевести задание, которое в данный момент работает в приоритетном режиме, в фоновый режим, используется команда bg
Так как задание работает в приоритетном режиме, то вы не можете вводить команды, поэтому сначала нужно приостановить выполнение задания. Для этого используется сочетание клавиш Ctrl+Z
После этого можно выполнить команду bg , чтобы продолжить выполнение задания, но уже в фоновом режиме.
Заключение
Мы кратко рассмотрели, как запускать команды Linux в фоновом режиме. Использование фонового режима позволяет запускать одновременно несколько процессов из одного окна терминала (экземпляра оболочки). Особенно это удобно, когда команда должна выполняться длительное время и не требует постоянного наблюдения. Пользователь при этом может продолжать пользоваться командной строкой.
Источник
Как управлять фоновыми процессами в Linux
Если вы только начинаете работать с Linux и уже пробовали вводить команды в терминале, вы могли заметить, что для ввода каждой новой команды вам приходится ждать, пока уже начатый процесс завершится. Так происходит потому, что по умолчанию при запуске команды процесс начинается в активном окне терминала, — пишет сайт hexx.in.ua в своем переводе статьи «How to manage background processes in Linux».
Что делать, когда надо запустить другую команду? Можно открыть еще одну сессию терминала, но можно обойтись и без этого. Давайте рассмотрим, как управлять фоновыми и приоритетными процессами в Linux.
Но сначала давайте разберемся, что такое фоновый и приоритетный процесс.
Приоритетный процесс — это та задача, которую в настоящее время выполняется в активном окне терминала. То есть, приоритетным в каждой сессии терминала может быть только один процесс. Прежде чем начать новый приоритетный процесс, придется подождать окончания предыдущего.
Примером может быть выполнение любой команды в текущей сессии.
Фоновый процесс — это процесс или задача, которые выполняются в фоне и не требуют взаимодействия с пользователем. Фоновых процессов может быть много.
Наиболее распространенный пример процесса, работающего в фоне, — веб-сервер.
Давайте попробуем запустить команду vmstat.
Эта команда показывает использование памяти и cpu в режиме реального времени. В качестве опции указываем 5 — это задержка перед выводом обновленных данных. Команда каждые 5 секунд будет выводить новую строку с данными, пока вы не прервете ее выполнение (пока не завершите начатый процесс). Для этого надо нажать CTL + C. А если вы хотите поставить процесс на паузу или остановить, надо нажать CTL + Z.
bg: перемещение задачи в фон
Предположим, вы хотите переместить в фон задание, выполнение которого уже началось (чтобы можно было делать в терминале что-то другое). Для этого надо нажать CTL + Z, а затем запустить команду bg (сокращение от background).
Давайте запустим выполнение какой-то приоритетной задачи. Например, будем записывать CPU-статистику в файл. Как видите, мы не можем ввести какую-то другую команду, поскольку эта задача выполняется в активном окне терминала (оно приоритетное).
Давайте поставим эту задачу на паузу, нажав CTL + Z, а затем выполним команду bg.
Теперь эта задача выполняется в фоне, а терминал свободен для введения новых команд.
Как сразу приступить к выполнению команды в фоне
Чтобы процесс запустился в фоне, после команды надо поставить знак &:
jobs: команда для проверки задач в текущем терминале
С помощью этой команды можно вывести все задачи, которые запущены в текущем терминале.
Номера в квадратных скобках [n] это номера (или идентификаторы) задач. Нумерация начинается с единицы. Знак «+» указывает на процесс, который был запущен последним, а «-» — на предпоследний процесс.
Если вы хотите увидеть идентификаторы самих процессов, надо использовать опцию -l:
Номера 10216 и 11122 — это идентификаторы процессов.
Возможные опции, которые можно использовать с командой jobs:
- -l — вывести список идентификаторов процессов в дополнение к обычной информации
- -n — перечислить только процессы, изменившие статус с последнего сообщения
- -r — ограничить вывод только запущенными задачами
- -s — ограничить вывод только остановленными задачами.
kill% n: прекращение выполнения задания с идентификатором n
Для прерывания заданий используется команда kill. Чтобы указать, какое именно задание надо прекратить выполнять, используется знак %, за которым следует номер задания.
Как видите, теперь у нас только один процесс в фоне. Причем знак «+» показывает, что это последняя из запущенных задач.
fg: команда для перемещения задачи в интерактивный режим
Чтобы переместить задачу в активное окно терминала (на передний план), используется команда fg (сокращение от foreground). По умолчанию (то есть, если не указать никаких опций), на передний план переместится процесс, который был запущен последним.
Если у вас в фоне выполняется больше одного процесса, можно указать номер задания, которое надо переместить на передний план.
Команда ps позволяет увидеть все процессы
Чтобы увидеть все активные процессы, используйте команду ps. При этом можно добавить следующие опции:
- ps ax — чтобы увидеть все процессы, недавно активные в системе. Список будет очень длинным, поэтому добавьте в конвейер less или more.
- ps T — чтобы увидеть все процессы, выполняемые в текущем терминале.
Выводы
Мы рассмотрели команды, которые позволяют управлять фоновыми и приоритетными процессами:
- bg и fg — для перемещения задач в фон и обратно, в активное окно;
- jobs — для вывода списка активных задач в текущем терминале;
- kill — для прерывания процесса;
- ps — для вывода списка активных и запущенных процессов.
Мы также научились запускать задачи в фоне, добавив к команде знак &.
Источник
Как запускать команды Linux в фоновом режиме
How to Run Linux Commands in Background
В этой статье мы поговорим о фоновых процессах Linux. Мы покажем вам, как запустить команду в фоновом режиме и как сохранить процесс работающим после закрытия сеанса оболочки.
Обычно, когда вы запускаете команду в терминале, вам нужно подождать, пока команда не завершится, прежде чем вы сможете ввести другую. Это называется выполнением команды на переднем или переднем плане процесса. Когда процесс выполняется на переднем плане, он занимает вашу оболочку, и вы можете взаимодействовать с ним, используя устройства ввода.
Что если выполнение команды занимает много времени, а вы хотите выполнять другие команды в это время? У вас есть несколько вариантов в вашем распоряжении. Наиболее очевидный и простой вариант — запустить новый сеанс оболочки и запустить в нем команду. Другой вариант — запустить команду в фоновом режиме.
Фоновый процесс — это процесс / команда, которая запускается из терминала и выполняется в фоновом режиме, без взаимодействия с пользователем.
Запустите команду Linux в фоновом режиме
Чтобы выполнить команду в фоновом режиме, добавьте символ амперсанда ( & ) в конце команды:
Идентификатор задания оболочки (заключенный в квадратные скобки) и идентификатор процесса будут напечатаны на терминале:
Вы можете одновременно запускать несколько процессов в фоновом режиме.
Фоновый процесс будет продолжать записывать сообщения в терминал, из которого вы вызвали команду. Для подавления stdout и stderr сообщения используют синтаксис следующий:
>/dev/null 2>&1 означает перенаправление stdout на /dev/null и stderr к stdout .
Используйте jobs утилиту для отображения состояния всех остановленных и фоновых заданий в текущем сеансе оболочки:
Вывод включает в себя номер задания, идентификатор процесса, состояние задания и команду, запустившую задание:
Чтобы вывести фоновый процесс на передний план, используйте fg команду:
Если у вас есть несколько фоновых заданий, включите % и идентификатор задания после команды:
Чтобы завершить фоновый процесс, используйте kill команду, за которой следует идентификатор процесса:
Переместить процесс переднего плана в фон
Чтобы переместить запущенный процесс переднего плана в фоновом режиме:
- Остановите процесс, набрав Ctrl+Z .
- Переместите остановленный процесс в фоновом режиме, набрав bg .
Поддерживать выполнение фоновых процессов после выхода из оболочки
Если ваше соединение прерывается или вы выходите из сеанса оболочки, фоновые процессы завершаются. Есть несколько способов сохранить процесс после завершения сеанса интерактивной оболочки.
Одним из способов является удаление задания из управления заданиями оболочки с помощью disown встроенной оболочки:
Если у вас есть несколько фоновых заданий, включите % и идентификатор задания после команды:
Убедитесь, что задание удалено из таблицы активных заданий с помощью jobs -l команды. Для просмотра списка всех запущенных процессов, в том числе отключенных, используйте ps aux команду.
Другой способ сохранить процесс запущенным после выхода из оболочки — использовать nohup .
Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все SIGHUP сигналы (зависания). SIGHUP это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.
Чтобы запустить команду в фоновом режиме, используя nohup команду, введите:
Вывод команды перенаправляется в nohup.out файл.
Если вы выйдете из системы или закроете терминал, процесс не прекратится.
Альтернативы
Есть ряд программ, которые позволяют вам иметь несколько интерактивных сессий одновременно.
Screen
Screen или GNU Screen — это программа мультиплексора терминала, которая позволяет запустить сеанс экрана и открыть любое количество окон (виртуальных терминалов) внутри этого сеанса. Процессы, запущенные в Screen, будут продолжать работать, когда их окно не видно, даже если вы отключены.
Tmux — современная альтернатива экрану GNU. С Tmux вы также можете создать сеанс и открыть несколько окон внутри этого сеанса. Сеансы Tmux являются постоянными, что означает, что программы, работающие в Tmux, продолжают работать, даже если вы закрываете терминал.
Вывод
Чтобы запустить команду в фоновом режиме, включите & в конце команды.
Когда вы запускаете команду в фоновом режиме, вам не нужно ждать, пока она не завершится, прежде чем вы сможете выполнить еще одну.
Источник
Запустить процесс в фоне в Linux
Служба с терминалом Linux по умолчанию ведется в однозадачном режиме. Это означает, что любая запущенная бригада блокирует терминал до своего завершения. Такой подход не удобен при запуске программ, спрашивающих продолжительного времени выполнения. Данную проблему можно решить двумя способами: раскрыть дополнительное окно терминала и выполнить в нем другую команду или использовать фоновый режим. Все нынешние операционные системы, в том числе и Linux, являются многозадачными, что подразумевает под собой возможность синхронного выполнения множества программ.
Запуск команд в фоновом режиме в Linux
Как запустить бригаду в фоновом режиме, чтобы сразу получить доступ к интерфейсу командной строки? Бригада, выполнение которой было запланировано принудительно, называется фоновым процессом. Фоновые процессы не показываются на экране. Например, HTTPD-сервер Apache работает в фоновом режиме для обслуживания веб-страниц. В низкоприоритетный режим можно поместить скрипт оболочки или любую команду. Задачу (например, бригаду или скрипт) можно перевести в фоновый режим, добавив символ «&» в конец командной строчки. Этот оператор переводит команду в фоновый режим и освобождает место в терминале. Бригада, выполняемая в фоновом режиме, называется заданием. Во время работы фоновой команды возможно выполнять любые другие команды. Синтаксис выглядит следующим образом:
command & script-name & /path/to/command arg1 arg2 & command-1 | command-2 arg1 & command-1 | command-2 -arg1 -arg2 >/path/to/output &
Для пуска программ в фоновом режиме, не блокирующем окно терминала, необходимо использовать специальный инструктор «&». Поставьте этот символ в самом конце строки после указания фамилии команды, опций и входящих параметров. В общем виде данную последовательность можно вписать как «имя_команды —опция входящий_параметр &».
/test-file.txt &
[1] 18960
После нажатия кнопки Enter программа автоматически запустится в фоновом режиме. При этом терминал покажет строчку со следующим содержимым «[номер_задания] идентификатор_процесса», и выдаст приглашение к вводу новоиспеченной команды.
Найти команды, работающие в фоновом режиме в Linux
Выполните следующую бригаду:
Пример вывода данных:
[1]- Running find / -iname «*.c» 2> /dev/null > /tmp/output.txt &
[2]+ Running grep -R «hostNamed» / 2> /dev/null > /tmp/grep.txt &
Где [1] и [2] идентификаторы поручений.
Чтобы отобразить идентификаторы процессов для идентификаторов заданий помимо стандартных приведений, передайте параметр -l:
Пример вывода данных:
[1]- 7307 Running find / -iname «*.c» 2> /dev/null > /tmp/output.txt &
[2]+ 7324 Running grep -R «hostNamed» / 2> /dev/null > /tmp/grep.txt &
Дабы отобразить только идентификаторы процессов, введите:
Пример вывода данных:
Кончить выполнение команд, работающих в фоновом режиме
Для принудительного или постепенного завершения процесса вытечет использовать команду kill. Синтаксис выглядит следующим образом:
kill PID
kill -15 PID
kill -9 PID
killall process-Name-Here
killall -15 process-Name-Here
killall -9 process-Name-Here
Возврат програмки в приоритетный режим в Linux
Linux позволяет не только запускать программы в фоновом режиме, но и по хотению возвращать к привычному выполнению. Для этого существует два инструмента: команда (Команда — группа лиц, объединённая общими мотивами, интересами) fg и оператор %. Принцип их усилия предельно прост. fg требует указать номер задания в качестве параметра, а к % его нужно подставить сходу после оператора без пробелов.
Источник