Как открыть фоновый процесс linux
Запуск программ в фоновом режиме на Linux
При работе в ОС семейства Linux бывают случаи, когда необходимо запустить некий долгий процесс, например поиск файла, и при этом вернуться к работе в консоли. Вполне разумным решением будет открыть несколько терминалов и выполнить каждую задачу индивидуально, но что если мы не ищем легких путей? В этом случае разумным было бы запустить процесс в фоновом режиме. Рассмотрим как это сделать двумя способами.
Для начала следует разобрать синтаксис командной строки. Запуск одной программы/скрипта и т.д. выполняем явным указанием, например:
Для запуска одной программы по завершении другой используется логический оператор && (двойной амперсанд), например:
Не очень удачный пример, так как можно было использовать перенаправление “|”, приблизительно это выглядело бы так:
Все эти примеры замечательны для использования в скриптах, однако запуск “долгих” процессов сделает терминал недоступным, как это было отмечено выше. В этом случае поможет следующий пример:
Именно одинарный & в конце строки, указанный через пробел.
Как видно, первая строка запускает процесс, но так как в системе мало txt-файлов, процесс завершается. Последующее нажатие Enter в терминале сообщает, что процесс успешно выполнен.
Рассмотрим другой вариант. Воспользуемся утилитой ping, результаты будем писать в файл.
Ввиду отсутствия ограничительных параметров у данной команды, ее выполнение прервется когда закончится место на жестком диске.
Завершение процесса через killall покажет что процесс не завершился самостоятельно, а был “убит”.
Контролировать фоновые процессы, в данном случае, можно командой:
Для перехода в приоритетный режим можно использовать команду fg 1 или %1.
Воспользоваться утилитой-мультиплексором screen. В некоторых дистрибутивах требуется установка.
Как управлять фоновыми процессами в 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] это номера (или идентификаторы) задач. Нумерация начинается с единицы. Знак «+» указывает на процесс, который был запущен последним, а «-» — на предпоследний процесс.
Номера 10216 и 11122 — это идентификаторы процессов.
Возможные опции, которые можно использовать с командой jobs:
kill% n: прекращение выполнения задания с идентификатором n
Для прерывания заданий используется команда kill. Чтобы указать, какое именно задание надо прекратить выполнять, используется знак %, за которым следует номер задания.
Как видите, теперь у нас только один процесс в фоне. Причем знак «+» показывает, что это последняя из запущенных задач.
fg: команда для перемещения задачи в интерактивный режим
Чтобы переместить задачу в активное окно терминала (на передний план), используется команда fg (сокращение от foreground). По умолчанию (то есть, если не указать никаких опций), на передний план переместится процесс, который был запущен последним.
Если у вас в фоне выполняется больше одного процесса, можно указать номер задания, которое надо переместить на передний план.
Команда ps позволяет увидеть все процессы
Чтобы увидеть все активные процессы, используйте команду ps. При этом можно добавить следующие опции:
Выводы
Мы рассмотрели команды, которые позволяют управлять фоновыми и приоритетными процессами:
Мы также научились запускать задачи в фоне, добавив к команде знак &.
Запуск команд Linux в фоновом режиме и на переднем плане
Главное меню » Операционная система Linux » Запуск команд Linux в фоновом режиме и на переднем плане
Краткое описание: В этой статье показано, как запускать процессы в фоновом режиме в Linux и как вернуть фоновые процессы на передний план.
Е сли у вас есть долгосрочное задание, не всегда целесообразно дождаться его завершения. Мы имеем в виду, зачем держать терминал занятым для определенной команды? В Linux вы можете отправить команду или процесс в фоновый режим, чтобы команда выполнялась, но терминал мог свободно выполнять другие команды.
В этой статье мы покажем вам пару способов отправить процесс в фоновом режиме. мы также покажем вам, как вернуть фоновые процессы на передний план.
Запустите процесс Linux в фоновом режиме напрямую
Если вы знаете, что выполнение команды или процесса займет много времени, лучше запустить команду в фоновом режиме.
Чтобы запустить команду Linux в фоновом режиме, все, что вам нужно сделать, это добавить амперсанд (&) в конце команды, например так:
Давайте возьмем простую команду bash sleep и отправим ее в фоновый режим.
Когда команда заканчивается в фоновом режиме, вы должны увидеть информацию об этом в терминале.
Отправить работающий процесс Linux в фоновом режиме
Если вы уже запустили программу, а затем поняли, что вы должны запустить ее в фоновом режиме, не беспокойтесь. Вы также можете отправить запущенный процесс в фоновый режим.
Здесь вы должны использовать Ctrl + Z, чтобы приостановить запущенный процесс, а затем использовать bg (сокращение от фона), чтобы отправить процесс в фоновом режиме. Приостановленный процесс теперь будет работать в фоновом режиме.
Давайте возьмем тот же пример, что и раньше.
Просмотреть все процессы, работающие в фоновом режиме
Теперь, когда вы знаете, как отправлять процессы в фоновом режиме, вам может быть интересно узнать, какие команды выполняются в фоновом режиме.
Для этого вы можете ввести эту команду в терминал:
Это покажет вам все запущенные задания/процессы/команды в фоновом режиме, как это:
Вывести процесс на передний план в Linux
Хорошо! Итак, вы научились запускать команды в фоновом режиме в Linux. Но как насчет того, чтобы вывести процесс, работающий в фоновом режиме, снова на передний план?
Чтобы отправить команду в фоновый режим, вы использовали «bg». Чтобы вернуть фоновый процесс обратно, используйте команду ‘fg’.
Теперь, если вы просто используете fg, он выведет последний процесс в очереди фоновых заданий на передний план. В нашем предыдущем примере запуск fg вернет редактор Vim в терминал.
Если вы хотите вывести определенный процесс на передний план, вам нужно указать его идентификатор работы. Идентификатор задания – это число, которое вы видите в начале каждой строки в выводе команды ‘jobs’.
Где n – это идентификатор задания, отображаемый в выходных данных командных заданий.
Итого
Это было быстро, но достаточно для того, чтобы вы немного узнали о запуске команд в фоновом режиме в Linux.
Если у вас есть вопросы или предложения, пожалуйста, оставьте комментарий ниже.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Как запускать команды Linux в фоновом режиме
How to Run Linux Commands in Background
В этой статье мы поговорим о фоновых процессах Linux. Мы покажем вам, как запустить команду в фоновом режиме и как сохранить процесс работающим после закрытия сеанса оболочки.
Обычно, когда вы запускаете команду в терминале, вам нужно подождать, пока команда не завершится, прежде чем вы сможете ввести другую. Это называется выполнением команды на переднем или переднем плане процесса. Когда процесс выполняется на переднем плане, он занимает вашу оболочку, и вы можете взаимодействовать с ним, используя устройства ввода.
Запустите команду Linux в фоновом режиме
Чтобы выполнить команду в фоновом режиме, добавьте символ амперсанда ( & ) в конце команды:
Идентификатор задания оболочки (заключенный в квадратные скобки) и идентификатор процесса будут напечатаны на терминале:
Вы можете одновременно запускать несколько процессов в фоновом режиме.
Фоновый процесс будет продолжать записывать сообщения в терминал, из которого вы вызвали команду. Для подавления stdout и stderr сообщения используют синтаксис следующий:
Используйте jobs утилиту для отображения состояния всех остановленных и фоновых заданий в текущем сеансе оболочки:
Вывод включает в себя номер задания, идентификатор процесса, состояние задания и команду, запустившую задание:
Чтобы вывести фоновый процесс на передний план, используйте fg команду:
Если у вас есть несколько фоновых заданий, включите % и идентификатор задания после команды:
Чтобы завершить фоновый процесс, используйте kill команду, за которой следует идентификатор процесса:
Переместить процесс переднего плана в фон
Чтобы переместить запущенный процесс переднего плана в фоновом режиме:
Поддерживать выполнение фоновых процессов после выхода из оболочки
Если ваше соединение прерывается или вы выходите из сеанса оболочки, фоновые процессы завершаются. Есть несколько способов сохранить процесс после завершения сеанса интерактивной оболочки.
Одним из способов является удаление задания из управления заданиями оболочки с помощью disown встроенной оболочки:
Если у вас есть несколько фоновых заданий, включите % и идентификатор задания после команды:
Команда nohup выполняет другую программу, указанную в качестве аргумента, и игнорирует все SIGHUP сигналы (зависания). SIGHUP это сигнал, который отправляется процессу, когда его управляющий терминал закрыт.
Чтобы запустить команду в фоновом режиме, используя nohup команду, введите:
Вывод команды перенаправляется в nohup.out файл.
Если вы выйдете из системы или закроете терминал, процесс не прекратится.
Альтернативы
Есть ряд программ, которые позволяют вам иметь несколько интерактивных сессий одновременно.
Screen
Вывод
Чтобы запустить команду в фоновом режиме, включите & в конце команды.
Когда вы запускаете команду в фоновом режиме, вам не нужно ждать, пока она не завершится, прежде чем вы сможете выполнить еще одну.
Запуск команд Linux в фоновом режиме (+Видео)
В данной заметке мы рассмотрим, как запускать команды Linux в фоновом режиме. То есть, когда после запуска какой-либо команды, она начинает свою работу в фоне, а вы продолжаете работать в терминале.
Видео
Видео-версия. Наше видео про запуск команд в фоновом режиме.
Что такое приоритетный и фоновый режимы
Обычно все команды Linux запускаются в оболочке (в командной строке) в приоритетном режиме, называемом foreground. В этом режиме оболочка ожидает завершения работы команды, прежде чем пользователь сможет ввести новую команду.
Можно запускать команды Linux в фоновом режиме — background, при котором не нужно ожидать завершения команды, чтобы запустить другую команду.
Пользователь может запускать несколько команд в фоновом режиме одновременно. То есть эти команды будут выполняться параллельно. При этом окно терминала доступно для ввода новых команд.
Как запустить команду в фоновом режиме
Чтобы запустить команду в фоновом режиме, нужно в конец команды через пробел добавить знак амперсанда &
Синтаксис запуска команды в фоновом режиме можно записать следующим образом:
Пример запуска команды в фоновом режиме
Рассмотрим пример. Предположим, нам нужно распаковать большой tar-архив. Выполняем команду:
Распаковка архива выполняется в фоновом режиме, а мы можем вводить в терминале новые команды.
Как вы можете видеть, на экран выводятся символы [1] 7958
[1] — это номер, который оболочка назначила нашему фоновому заданию, чтобы мы могли идентифицировать его и управлять им (см. ниже как).
7958 — это идентификатор (PID) процесса, который был создан.
Как вывести задание из фонового режима
Если вы запустили один или несколько процессов в фоновом режиме, то вы можете подключиться к любому из них и вывести из фонового режима (перевести в приоритетный режим). Для этого используется команда fg
Можно указать номер конкретного задания, которое нужно вывести из фонового режима:
Просмотр заданий, работающих в фоновом режиме
Для просмотра заданий, работающих в фоновом режиме, используется команда jobs
Символом плюс + помечается последнее запущенное задание. Если использовать команду fg без аргументов, то она будет применена именно к этому заданию.
Символом минус — помечается задание, которое было запущено перед последним.
Перевод задания в фоновый режим
Чтобы перевести задание, которое в данный момент работает в приоритетном режиме, в фоновый режим, используется команда bg
Так как задание работает в приоритетном режиме, то вы не можете вводить команды, поэтому сначала нужно приостановить выполнение задания. Для этого используется сочетание клавиш Ctrl+Z
Заключение
Мы кратко рассмотрели, как запускать команды Linux в фоновом режиме. Использование фонового режима позволяет запускать одновременно несколько процессов из одного окна терминала (экземпляра оболочки). Особенно это удобно, когда команда должна выполняться длительное время и не требует постоянного наблюдения. Пользователь при этом может продолжать пользоваться командной строкой.









