Фоновые задачи 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. Запуск фоновых задач #
- Запустите приложение
more.- Завершите работу данного процесса с помощью сочетания клавиш
Ctrl+C. - Удостоверьтесь, что вы можете выполнять команды в данном Bash-терминале.
Удостоверьтесь, что в системе больше нет процессов
more.
- Завершите работу данного процесса с помощью сочетания клавиш
- Запустите приложение
moreв фоновом режиме.- Какой номер получило фоновая задача?
- Какой номер процесса был выдан данной задаче?
- Проверьте с помощью
psномер процесса дляmore.
- Отобразите список активных задач для данного Bash-терминала.
- Верните задачу №1 на передний план.
- Завершите процесс
more.
Задача № 2. Приостановка процессов #
- Запустите приложение
more. - Приостановите работу приложения
moreс помощью сочетания клавишCtrl+Z. Что произошло? - Отобразите список задач для данного Bash-терминала. В каком состоянии находится текущая задача?
- С помощью приложения
psнайдите состояние процессаmore. - Продолжите работу приложения в фоновом режиме.
- Завершите работу текущего Bash-терминала. Что стало с приложением
more? Можно ли использовать фоновый процесс, чтобы организовать работу службы?
Интерактивный просмотр списка процессов в Linux с помощью top
#
Документация #
Ознакомьтесь с документацией на приложение top:
- Команда TOP в Linux
- Как пользоваться командой top для наблюдения за процессами в Linux
- 15 примеров использования в Linux команды top
- man 1 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для отображения списка горячих клавиш, на которые реагируетtopqдля выхода из приложения
Задача № 3. Использование приложения top
#
- Изучите ваш компьютер:
- Какой объём оперативной памяти доступен в системе?
- Какой объём раздела подкачки доступен в системе?
- Какой объём загрузки системы был за последние 5 минут?
- Какое количество процессоров есть в системе?
- Какой процесс в текущий момент потребляет больше всего процессорного времени?
- Какой процесс от пользователя root в настоящий момент потребляет больше всего оперативной памяти?
- Измените список активных столбцов на следующий:
- Номер процесса.
- Номер последнего использованного процессора.
- Процент использования процессора.
- Процент использования памяти.
- Номер контролирующего TTY.
Установите сортировку по проценту использования памяти.