Как запустить процесс в фоне Linux
Как правило, выполнение команд в терминале связано с одним неудобством — прежде чем приступить к вводу следующей команды, следует дождаться выполнения предыдущей. Это происходит, поскольку текущий процесс блокирует доступ к оболочке операционной системы и в таких случаях говорят, что команда выполняется на переднем плане. Что же делать, если нужно запустить несколько команд одновременно? Есть несколько решений. Первое и наиболее очевидное — открыть дополнительное окно терминала. Второе — инициировать выполнение команды в фоновом режиме.
Если какой-либо процесс происходит в фоновом режиме, это значит, что он не предусматривает взаимодействия с пользователем, следовательно, доступ к оболочке остается свободным. Прочитав эту статью, вы узнаете как запустить процесс в фоне Linux и что делать, чтобы их выполнение не прерывалось после закрытия терминала.
Как запустить процесс в фоне Linux
Для выполнения команды в фоновом режиме достаточно добавить в конце символ амперсанда (&):
В выводе терминала будут отображены порядковый номер задачи (в квадратных скобках) и идентификатор процесса:
В фоновом режиме можно одновременно запускать сразу два, три, четыре процесса и даже больше.
Работая в фоновом режиме, команда все равно продолжает выводить сообщения в терминал, из которого была запущена. Для этого она использует потоки stdout и stderr, которые можно закрыть при помощи следующего синтаксиса:
command > /dev/null 2>&1 &
Здесь >/dev/null 2>&1 обозначает, что stdout будет перенаправлен на /dev/null, а stderr — к stdout.
Узнать состояние всех остановленных и выполняемых в фоновом режиме задач в рамках текущей сессии терминала можно при помощи утилиты jobs c использованием опции -l:
Вывод содержит порядковый номер задачи, идентификатор фонового процесса, состояние задачи и название команды, которая запустила задание.
В любое время можно вернуть процесс из фонового режима на передний план. Для этого служит команда fg:
Если в фоновом режиме выполняется несколько программ, следует также указывать номер. Например:
Для завершения фонового процесса применяют команду kill с номером программы:
Как перевести процесс в фоновый режим
Если изначально процесс был запущен обычным способом, его можно перевести в фоновый режим, выполнив следующие действия:
- Остановить выполнение команды, нажав комбинацию клавиш Ctrl+Z.
- Перевести процесс в фоновый режим при помощи команды bg.
Работа процессов в фоне
Запуск скрипта в фоне linux — это одно, но надо чтобы он ещё работал после закрытия терминала. Закрытие терминала путем нажатия на крестик в верхнем углу экрана влечет за собой завершение всех фоновых процессов. Впрочем, есть несколько способов сохранить их после того как связь с интерактивной оболочкой прервется. Первый способ — это удаление задачи из очереди заданий при помощи команды disown:
Как и в предыдущих случаях, при наличии нескольких одновременно выполняемых процессов следует указывать номер того, относительно которого будет выполнено действие:
Убедиться, что задачи больше нет в списке заданий, можно, использовав уже знакомую утилиту jobs -l. А чтобы просмотреть перечень всех запущенных процессов (в том числе и отключенных) применяется команда
Второй способ сохранить запущенные процессы после прекращения работы терминала — команда nohup. Она выполняет другую команду, которая была указана в качестве аргумента, при этом игнорирует все сигналы SIGHUP (те, которые получает процесс при закрытии терминала). Для запуска команды в фоновом режиме нужно написать команду в виде:
Как видно на скриншоте, вывод команды перенаправляется в файл nohup.out. При этом после выхода из системы или закрытия терминала процесс не завершается. Существует ряд программ, которые позволяют запускать несколько интерактивных сессий одновременно. Наиболее популярные из них — Screen и Tmux.
- Screen либо GNU Screen — это терминальный мультиплексор, который позволяет запустить один рабочий сеанс и в рамках него открыть любое количество окон (виртуальных терминалов). Процессы, запущенные в этой программе, будут выполняться, даже если их окна невидимы или программа прекратила работу.
- Tmux — более современная альтернатива GNU Screen. Впрочем, возможности Tmux не имеют принципиальных отличий — в этой программе точно так же можно открывать множество окон в рамках одного сеанса. Задачи, запущенные в Tmux, продолжают выполняться, если терминал был закрыт.
Выводы
Чтобы запустить скрипт в фоне linux, достаточно добавить в конце знак &. При запуске команд в фоновом режиме отпадает необходимость дожидаться завершения одной команды для того, чтобы ввести другую. Если у вас возникли вопросы, обязательно задавайте их в комментариях.
2 мин для чтения Запуск команд 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.
Запуск команд в фоновом режиме
Как запустить команду в фоновом режиме, чтобы сразу получить доступ к интерфейсу командной строки?
Команда, выполнение которой было запланировано принудительно, называется фоновым процессом. Фоновые процессы не отображаются на экране. Например, HTTPD-сервер Apache работает в фоновом режиме для обслуживания веб-страниц. В фоновый режим можно поместить скрипт оболочки или любую команду.
Виртуальный сервер на базе Linux
Синтаксис
Задачу (например, команду или скрипт) можно перевести в фоновый режим, добавив символ «&» в конец командной строки. Этот оператор переводит команду в фоновый режим и освобождает место в терминале. Команда, выполняемая в фоновом режиме, называется заданием. Во время работы фоновой команды можно выполнять любые другие команды. Синтаксис выглядит следующим образом:
command & script-name & /path/to/command arg1 arg2 & command-1 | command-2 arg1 & command-1 | command-2 -arg1 -arg2 >/path/to/output &
Примеры
Чтобы перевести команду ls в фоновый режим, введите:
$ ls *.py > output.txt &
Чтобы перевести следующую команду поиска в фоновый режим, добавьте символ «&» в конец командной строки:
find . -iname «*.mp3» > myplaylist.txt &
Как найти задания, работающие в фоновом режиме?
Выполните следующую команду:
jobs
Пример вывода данных:
Где
[1] и [2] идентификаторы заданий.
Чтобы отобразить идентификаторы процессов для идентификаторов заданий помимо стандартных сведений, передайте параметр -l: jobs –l
Пример вывода данных:
Чтобы отобразить только идентификаторы процессов, введите:
jobs -p
Пример вывода данных:
Как прекратить выполнение заданий, работающих в фоновом режиме?
Для принудительного или постепенного завершения процесса следует использовать команду kill. Синтаксис выглядит следующим образом:
Как переместить процесс из фонового режима в приоритетный?
Сначала следует вывести список текущих заданий с помощью команды jobs. Для этого введите: jobs -l
Пример вывода данных:
Чтобы перевести задание job id #2 в приоритетный режим, введите: %2 ИЛИ используйте команду: fg 2
Пример вывода данных:
Чтобы перевести это задание обратно в фоновый режим, нажмите клавишу Z, удерживая клавишу CTRL. При этом выполнение текущего приоритетного задания будет приостановлено. Введите следующую команду, чтобы перевести задание в фоновый режим:
%2 &
ИЛИ используйте команду: bg
Теперь командное задание grep будет работать в фоновом режиме.
Краткое описание всех полезных команд
Описание | Команда |
---|---|
Идентификация выполняемых заданий. | jobs jobs -l ps aux |
Перевод команды или скрипта в приоритетный режим. | command & /path/to/command & /path/to/script arg1 & |
Перевод фонового задания в приоритетный режим. | fg n %n |
Перевод задания в фоновый режим без его отмены | bg n %n & |
Примечание: n — это id задания (id задания можно узнать, выполнив команду jobs).