Фоновые задачи Bash

Фоновые задачи Bash #

Команды #

  • jobs - отобразить задачи текущего Bash-процесса.
  • bg - переместить задачу в фоновый режим работы.
  • fg - переместить задачу на передний план.
  • top - интерактивное отображение процессов.

Задачи в Bash, передний план и фоновый режим #

Документация #

Внимание! В будущем при сдаче работ не допускается наличие задач в фоне. Вы их можете использовать во время выполнения задач, однако по окончании работ все фоновые процессы должны быть остановлены.

Краткий обзор состояний процессов #

Подготовка к отправке сообщений #

Для изучения поведения приложения в различных состояниях нам потребуется интерактивное приложение и два активных терминала на одной виртуальной машине. В одном терминале у нас будет некоторое интерактивное приложение, а во втором мы будем отправлять данному приложению сигналы.

В качестве тестового приложения рассмотрим more с открытым большим текстовым файлом. В качестве файла можно использовать любой большой файл из предыдущих практических. Если у вас нет файла, то можно воспользоваться /var/log/README.logs.

Прерывание работы процесса #

Откройте большой текстовый файл с помощью приложения more. Убедитесь, что приложение сейчас работает. На нижней строке терминала должна показываться метка --More--:

2020-10-01 12:07:33 status triggers-pending libc-bin:amd64 2.31-3
--More--(0%)

Нажмите сочетание клавиш Ctrl+c. Работа приложения должна прерваться. Это происходит, т.к. данное сочетание клавиш посылает запрос на завершение работы приложению. При получении этого сигнала приложение обрабатывает его и завершает свою работу.

Обработчик этого сигнала по умолчанию завершает работу приложения, однако разработчики приложения могут реализовать свой собственный обработчик.

Помещение процесса в фон #

Bash предоставляет возможности для организации одновременной работы со множеством приложений в рамках одной сессии Bash-терминала. Это достигается благодаря помещению ряда процессов в фон и переводом некоторых процессов из фона на передний план. С точки зрения графического интерфейса это можно сравнить с работой за мобильным телефоном - только одно приложение может выводить информацию на экран, а остальные помещаются в фон.

Чтобы запустить команду в фоновом режиме необходимо в конце команды поставить знак амперсанда &:

andrey@andrey-home-pc:~$ less /var/log/dpkg.log &
[1] 143700
andrey@andrey-home-pc:~$

В результате выполнения данной команды приложение less было запущено, однако помещено в фон. Напечатанная строка говорит, что сейчас в фоне есть одна задача и PID процесса равен 143700. Если мы посмотрим на запущенные процессы с помощью ps, то увидим:

andrey@andrey-home-pc:~$ ps -o pid,stat,command
    PID STAT COMMAND
 143976 S    bash
 143993 T    less /var/log/dpkg.log
 143994 R+   ps -o pid,stat,command

Обратите внимание на состояние процесса. Мы можем посмотреть список работающих в фоне команд с помощью встроенной команды jobs:

andrey@andrey-home-pc:~$ jobs
[1]+  Остановлен    less /var/log/dpkg.log

Перемещение процесса из фона на передний план #

Фоновые процессы не воспринимают никакой ввод данных от пользователя, включая отправление специальных сигналов (например Ctrl+c). Для возвращения процесса из фона на передний план, например для завершения, необходимо использовать команду fg:

andrey@andrey-home-pc:~$ jobs
[1]+  Остановлен    less /var/log/dpkg.log
andrey@andrey-home-pc:~$ fg %1

Для обозначения работы используется нотация процент-номер задачи.

Приостановка работы процесса #

Если во время работы с приложением мы хотим обратиться к другому, тогда разумно приостановить его работу, запустить другую задачу вместо завершения работы с первым приложением. Нельзя использовать эту технику вместо завершения работы.

Для помещения текущего процесса из переднего плана в фон необходимо нажать сочетание клавиш Ctrl+z. После этого приложение приостановит свою работу и будет помещено в фон.

Для разрешения работы приложения в фоне можно воспользоваться командой bg. Она принимает такие же аргументы, как и fg. Это имеет смысл для приложений, выполняющих вычисления, чтобы они продолжили свою работу. Это также разумно для приложений с графическим интерфейсом.

Задача № 1. Запуск фоновых задач #

  1. Запустите приложение more.
    1. Завершите работу данного процесса с помощью сочетания клавиш Ctrl+C.
    2. Удостоверьтесь, что вы можете выполнять команды в данном Bash-терминале. Удостоверьтесь, что в системе больше нет процессов more.
  2. Запустите приложение more в фоновом режиме.
    1. Какой номер получило фоновая задача?
    2. Какой номер процесса был выдан данной задаче?
    3. Проверьте с помощью ps номер процесса для more.
  3. Отобразите список активных задач для данного Bash-терминала.
  4. Верните задачу №1 на передний план.
  5. Завершите процесс more.

Задача № 2. Приостановка процессов #

  1. Запустите приложение more.
  2. Приостановите работу приложения more с помощью сочетания клавиш Ctrl+Z. Что произошло?
  3. Отобразите список задач для данного Bash-терминала. В каком состоянии находится текущая задача?
  4. С помощью приложения ps найдите состояние процесса more.
  5. Продолжите работу приложения в фоновом режиме.
  6. Завершите работу текущего Bash-терминала. Что стало с приложением more? Можно ли использовать фоновый процесс, чтобы организовать работу службы?

Интерактивный просмотр списка процессов в Linux с помощью top #

Документация #

Ознакомьтесь с документацией на приложение top:

Краткий обзор приложения top #

В отличие от предыдущего приложения top является интерактивным, его можно сравнить с диспетчером задач в Windows. Он периодически опрашивает состояние системы и отображает активные процессы. Название приложения отражает мысль, что она показывает только процессы, которые используют наибольшее количество ресурсов.

Интерфейс top разделён на две части: сверху показывается сводка по загруженности системы, а ниже показывается список процессов. По умолчанию сортировка происходит по уровню загрузки на центральный процессор.

Рассмотрим сводку:

top - 11:54:28 up  3:24,  2 users,  load average: 1,00, 1,40, 1,27
Tasks: 463 total,   1 running, 462 sleeping,   0 stopped,   0 zombie
%Cpu(s):  4,4 us,  0,7 sy,  0,0 ni, 94,5 id,  0,0 wa,  0,0 hi,  0,4 si,  0,0 st
MiB Mem :  32116,7 total,  18212,6 free,   6363,0 used,   7541,1 buff/cache
MiB Swap:  16384,0 total,  16384,0 free,      0,0 used.  24955,0 avail Mem
Строка Поле Значение
1 top Название приложения
1 11:54:28 Текущее время
1 up 3:24 Сколько времени компьютер работает после запуска
1 2 users Количество пользователей в системе
1 load average: Средняя нагрузка на систему, разъяснение ниже
2 Tasks: Сводка процессов и их возможных состояний
3 %Cpu(s): Строка описывает нагрузку на процессор
3 4.4 us 4.4% нагрузки в пространстве пользователя
3 0.7 sy 0.7% нагрузки используется ядром ОС
3 0.0 ni 0.0% используют низкоприоритетные процессы
3 94.5 id 94.5% возможностей процессора не используются
3 0.0 wa 0.0% на задачи, ожидающие окончания ввода/вывода
3 0.0 hi 0.0% на задачи, обрабатывающие прерывания
3 0.4 si 0.4% на обработку программных прерываний
3 0.0 st 0.0% украденного времени внутри виртуальной машины
4 MiB Mem: Информация о занятости оперативной памяти
5 MiB Swap: Информация о занятости раздела подкачки

Приложение top является интерактивным и реагирует на нажатие клавиш. Полезными являются:

  • h для отображения списка горячих клавиш, на которые реагирует top
  • q для выхода из приложения

Задача № 3. Использование приложения top #

  1. Изучите ваш компьютер:
  • Какой объём оперативной памяти доступен в системе?
  • Какой объём раздела подкачки доступен в системе?
  • Какой объём загрузки системы был за последние 5 минут?
  • Какое количество процессоров есть в системе?
  1. Какой процесс в текущий момент потребляет больше всего процессорного времени?
  2. Какой процесс от пользователя root в настоящий момент потребляет больше всего оперативной памяти?
  3. Измените список активных столбцов на следующий:
  • Номер процесса.
  • Номер последнего использованного процессора.
  • Процент использования процессора.
  • Процент использования памяти.
  • Номер контролирующего TTY.

Установите сортировку по проценту использования памяти.

© A. M. Васильев, 2025, CC BY-SA 4.0, andrey@crafted.su