Как запускать и контролировать фоновые процессы в Linux
Фатмавати Ахмад Дзэнури / Shutterstock.com
Используйте оболочку Bash в Linux для управления процессами переднего плана и фоновыми процессами. Вы можете использовать функции управления заданиями и сигналы Bash, чтобы обеспечить большую гибкость при выполнении команд. Мы покажем вам, как это сделать.
Все о процессах
Каждый раз, когда программа выполняется в Linux или Unix-подобной операционной системе, запускается процесс. Процесс - это имя внутреннего представления исполняемой программы в памяти компьютера. Для каждой активной программы есть свой процесс. Фактически, существует процесс почти для всего, что работает на вашем компьютере. Это включает в себя компоненты вашего графическая среда рабочего стола (GDE) такие как ГНОМ или ГДЕ , и система демоны которые запускаются при запуске.
Почему Около все, что работает? Ну, встроенные модули Bash, такие как компакт диск , pwd , и псевдоним не нужно запускать (или порождать) процесс при их запуске. Bash выполняет эти команды в экземпляре оболочки Bash, запущенной в окне вашего терминала. Эти команды бывают быстрыми именно потому, что для их выполнения не требуется запускать процесс. (Вы можете ввести help
в окне терминала, чтобы увидеть список встроенных модулей Bash.)
Процессы могут выполняться на переднем плане, и в этом случае они берут на себя ваш терминал до тех пор, пока они не будут завершены, или они могут выполняться в фоновом режиме. Процессы, которые выполняются в фоновом режиме, не доминируют в окне терминала, и вы можете продолжить работу в нем. Или, по крайней мере, они не доминируют в окне терминала, если не генерируют вывод на экран.
Грязный пример
Начнем с простого ping
трассировка бега . Мы собираемся ping
домен How-To Geek. Это будет выполняться как процесс переднего плана.
ping
Реклама
Получаем ожидаемые результаты, прокручивая окно терминала вниз. В окне терминала мы больше ничего делать не можем, пока Ctrl+C
это работает. Чтобы завершить команду, нажмите Ctrl+C
.
ping
Видимый эффект Ctrl+Z
выделено на скриншоте. Ctrl+C
дает краткое изложение и затем останавливается.
Давай повторим это. Но на этот раз мы нажмем Ctrl+Z
вместо jobs
. Задача не будет завершена. Это станет фоновой задачей. Мы получаем возвращенное нам управление окном терминала.
ps
T
Видимый эффект от удара -
выделено на скриншоте.
На этот раз нам говорят, что процесс остановлен. «Остановлен» не означает прекращен. Это как машина на знаке остановки. Мы его не утилизировали и не выбросили. Он все еще в дороге, неподвижен, ждет, чтобы уйти. Процесс теперь является фоном работа .
T
команда перечислит вакансии которые были запущены в текущем терминальном сеансе. А поскольку задания (неизбежно) являются процессами, мы также можем использовать jobs
команда, чтобы увидеть их. Давайте воспользуемся обеими командами и сравним их результаты. Мы будем использовать +
option (терминал), чтобы вывести список только тех процессов, которые выполняются в этом окне терминала. Обратите внимание, что дефис использовать не обязательно ps
с Ss
вариант.
T
ping
Ctrl+Z
команда сообщает нам:
- Помещение процесса на задний план.
- Восстановление процесса в работающее состояние в фоновом режиме.
- Возвращение процесса на передний план.
- Завершение процесса.
- командная строка & : Добавление амперсанда
jobs
до конца командной строки выполняет эту команду как запущенную фоновую задачу. - & rsaquo; Как использовать фильтры Wireshark в Linux
- & rsaquo; Как убить процессы зомби в Linux
- & rsaquo; Как найти упакованный Spotify 2021
- & rsaquo; Киберпонедельник 2021: лучшие технические предложения
- & rsaquo; Киберпонедельник 2021: лучшие предложения Apple
- & rsaquo; Папке на компьютере 40 лет: как звезда Xerox создала рабочий стол
- & rsaquo; 5 сайтов, которые должен добавить в закладки каждый пользователь Linux
- & rsaquo; Функции и формулы в Microsoft Excel: в чем разница?
ps T
показывает, что это задание, которое будет выполняться, если мы используем команду управления заданием без конкретного номера задания. Это называется заданием по умолчанию. Заданием по умолчанию всегда является последнее, добавленное в список заданий. R
команда сообщает нам:
Это общие значения для столбца STAT:
За значением в столбце STAT может следовать один из этих дополнительных индикаторов:
Мы видим, что Bash находится в состоянии +
. Заглавная буква S говорит нам, что оболочка Bash спит, и ее можно прервать. Как только он нам понадобится, он ответит. Строчная буква s говорит нам, что оболочка является лидером сеанса.
Команда ping находится в состоянии ps T
. Это говорит нам, что bg
был остановлен сигналом управления заданием. В этом примере это был bg
раньше мы помещали его на задний план.
ping
команда имеет состояние ping
, что означает выполнение. Ctrl+C
указывает, что этот процесс является членом группы переднего плана. Итак, ping
команда выполняется на переднем плане.
Команда bg
fg
Команда используется для возобновления фонового процесса. Его можно использовать с номером задания или без него. Если вы используете его без номера задания, задание по умолчанию выводится на передний план. Процесс по-прежнему работает в фоновом режиме. Вы не можете отправлять в него какие-либо данные.
Если мы выдадим bg
команда, мы возобновим нашу fg
команда:
ping
Реклама
ping
команда возобновляется, и мы снова видим прокручиваемый вывод в окне терминала. Вам отображается имя команды, которая была перезапущена. Это выделено на скриншоте.
Но у нас есть проблема. Задача выполняется в фоновом режиме и не принимает ввод. Так как же нам это остановить? ping
ничего не делает. Мы можем видеть это, когда набираем его, но фоновая задача не получает этих нажатий клавиш, поэтому продолжает весело пинговать.
Фактически, мы сейчас находимся в странном смешанном режиме. Мы можем печатать в окне терминала, но то, что мы набираем, быстро сметается прокручивающимся выводом из Ctrl+C
команда. Все, что мы печатаем, действует заранее.
Чтобы остановить нашу фоновую задачу, нам нужно вывести ее на передний план, а затем остановить.
Команда fg
Ctrl+C
команда выведет фоновую задачу на передний план. Так же, как Ctrl+Z
команда, ее можно использовать с номером задания или без него. Использование его с номером задания означает, что он будет работать с конкретным заданием. Если он используется без номера задания, используется последняя команда, отправленная в фоновый режим.
Если мы наберем kill
наш kill
команда будет выведена на передний план. Вводимые нами символы смешиваются с выводом из kill -l
команда, но они обрабатываются оболочкой, как если бы они были введены в командной строке как обычно. Фактически, с точки зрения оболочки Bash, именно это и произошло.
kill
Реклама
И теперь, когда у нас есть Ctrl+C
команда, запущенная на переднем плане еще раз, мы можем использовать Ctrl+D
убить его.
kill
Нам нужно посылать правильные сигналы
Это было не совсем красиво. Очевидно, что выполнение процесса в фоновом режиме работает лучше всего, когда процесс не производит вывода и не требует ввода.
Но, беспорядочно или нет, наш пример действительно выполнил:
Когда вы используете Ctrl+Z
и kill
, вы отправляете сигналы процессу. Эти стенографические способы использования Ctrl+Z
команда. Есть 64 разных сигнала что bg
может отправить. Используйте &
в командной строке, чтобы перечислить их. jobs
не единственный источник этих сигналов. Некоторые из них автоматически вызываются другими процессами в системе.
Вот некоторые из наиболее часто используемых.
kill
. Процесс прерывается и требует прекращения. jobs
. kill
. Это стандартный сигнал завершения программы. %
. Он останавливает процесс и переводит его в фоновый режим. Мы должны использовать kill
команда для выдачи сигналов, которым не назначены сочетания клавиш.
Дальнейший контроль работы
Процесс перешел в фоновый режим с помощью SIGTERM
находится в остановленном состоянии. Мы должны использовать kill
команда, чтобы запустить его снова. Запустить программу как работающий фоновый процесс очень просто. Добавьте амперсанд kill
до конца командной строки.
Хотя лучше всего, чтобы фоновые процессы не записывали в окно терминала, мы будем использовать примеры, которые это делают. Нам нужно, чтобы на скриншотах было что-то, на что мы могли бы ссылаться. Эта команда запустит бесконечный цикл в фоновом режиме:
Рекламапока правда; делать эхо How-To Geek Loop Process; сон 3; Выполнено &
Нам сообщают номер задания и идентификатор процесса. Номер нашей работы - 1, а идентификатор процесса - 1979. Мы можем использовать эти идентификаторы для управления процессом.
Результат нашего бесконечного цикла начинает появляться в окне терминала. Как и раньше, мы можем использовать командную строку, но любые команды, которые мы выполняем, перемежаются с выходными данными процесса цикла.
ls
Чтобы остановить наш процесс, мы можем использовать SIGKILL
чтобы напомнить себе номер задания, а затем используйте kill
.
SIGINT
сообщает, что наш процесс - это работа номер 1. Чтобы использовать этот номер с SISQUIT
перед ним должен стоять знак процента SIGSTP
.
&
SIGTERM
СВЯЗАННЫЙ: Как работают сигналы Linux: SIGINT, SIGTERM и SIGKILL
SIGKILL
отправляет
ping www.howtogeek.comсигнал, номер сигнала 15, процессу, и он завершается. При следующем нажатии клавиши Enter отображается состояние задания. Он перечисляет процесс как завершенный. Если процесс не отвечает на
Ctrl+Cкоманда, вы можете поднять ее на ступеньку выше. Используйте
ping www.howtogeek.comс
Ctrl+Z, сигнал номер 9. Просто поместите цифру 9 между
jobsвведите номер задания.
ps T
Вещи, которые мы рассказали
bg, сигнал 2, процессу - если он принимает ввод - и приказывает ему завершить работу.
fg, сигнал 3, процессу - если он принимает ввод - и приказывает ему выйти.
Ctrl+C, сигнал 20, и приказывает ему остановиться (приостановить) и перейти в фоновый процесс.
kill %1, сигнал 15 процессу, чтобы завершить его.
kill 9 %1, сигнал 9, процессу и внезапно завершает его.
СВЯЗАННЫЙ: Как убить процессы из терминала Linux
СВЯЗАННЫЙ: Лучшие ноутбуки с Linux для разработчиков и энтузиастов
ПРОЧИТАЙТЕ СЛЕДУЮЩИЙДэйв Маккей впервые использовал компьютеры, когда в моде была перфолента, и с тех пор он занимается программированием. Проработав более 30 лет в ИТ-индустрии, он теперь работает журналистом в области информационных технологий. За свою карьеру он работал программистом-фрилансером, менеджером международной группы разработчиков программного обеспечения, менеджером проекта ИТ-услуг, а в последнее время - специалистом по защите данных. Его статьи были опубликованы на сайтах howtogeek.com, cloudsavvyit.com, itenterpriser.com и opensource.com. Дэйв - евангелист Linux и сторонник открытого исходного кода.
Прочитать полную биографию