Просмотр и управление процессами #
Команды #
ps- отобразить список процессов в текущий момент времени.top- интерактивное отображение процессов.jobs- отобразить задачи текущего Bash-процесса.bg- переместить задачу в фоновый режим работы.fg- переместить задачу на передний план.kill- послать сигнал процессу.killall- послать сигнал процессам по имени.shutdown- отключить или перезагрузить компьютер.
Процессы в Linux #
Документация #
Процессы и зачем о них знать #
Понятие процесса является краеугольным в теории и практике работы операционных систем. Оно описывает работающее приложение, работающее под управлением операционной системы, выделенные ему ресурсы в определённый момент исполнения.
Современные ОС являются мультизадачными, т.е. они способны поддерживать иллюзию работы множества процессов на одном вычислительном процессоре. Это достигается путём прерывания работы процесса несколько раз в секунду с последующим выбором нового процесса для выполнения. С точки зрения пользователя создаётся впечатление, что одновременно выполняется несколько процессов.
Если процессов запущено слишком много, тогда возможны следующие ситуации:
- Задачи медленно выполняются, т.к. запущено слишком много процессов.
- Задачи медленно выполняются, т.к. недостаточно оперативной памяти.
- Нужное приложение перестало отвечать на запросы от пользователя.
- Невозможно запустить новую задачу.
Для решения этих проблем обычно необходимо найти процессы, которые съедают необходимые вычислительные ресурсы. Затем, в зависимости от важности обнаруженного процесса, его можно либо остановить, чтобы освободить ресурсы, либо подождать его завершения перед выполнением новой задачи. И так далее.
Откуда берутся процессы #
Во время загрузки ОС сначала запускается ядро ОС, которое подготавливает оборудование для функционирования и свои внутренние структуры для запуска приложений. Затем ядро запускает init-процесс, который уже ответственен за запуск системных служб. Многие из этих служб продолжают работу в фоновом режиме и выключаются только вместе с завершением операционной системы.
Одной из таких служб является служба входа (текстового или графического) в систему. Когда пользователь успешно авторизуется в системе, то служба уже запускает процессы для его работы. В случае текстового интерфейса — эмулятор терминала и командный интерпретатор.
В рассмотренной схеме всегда участвуют два процесса: один запускает, а второй запускается. В рамках этого взаимодействия первый называется процессом-родителем, а второй процессом-ребёнком.
Операционная система отслеживает состояние всех процессов. В частности каждому процессу назначается его уникальный идентификатор, process ID, PID. 1 предназначен для процесса init. Другим назначаются свободные номера, зачастую в порядке увеличения номера.
Каждый процесс запускается от имени определённого пользователя и группы. Т.е. каждому процессу присваивается уникальный идентификатор пользователя и группы. В зависимости от этих значений процесс будет иметь соответствующие права по взаимодействию с файловой системой и другими частями ОС.
Просмотр списка процессов в Linux #
Документация #
Ознакомьтесь с документацией на приложение ps:
- Список процессов в Linux
- Как использовать команду ps для мониторинга процессов Linux
- Использование команды ps для просмотра процессов Linux
- man 1 ps
Краткий обзор приложения ps
#
Приложение ps позволяет получить информацию о процессах, которые запущены в момент вызова приложения. Оно имеет большое число опций, позволяющих ограничивать набор получаемой информации, фильтровать, сортировать списки процессов.
Рассмотрим самый простейший вывод ps:
$ ps
PID TTY TIME CMD
30452 pts/1 00:00:00 bash
32855 pts/1 00:01:07 emacs
40837 pts/1 00:00:00 ps
В результате вызова ps сформирует таблицу, описывающие процессы, информацию о которых запросил пользователь. По умолчанию выводятся следующие столбцы:
PID— уникальный идентификатор процесса.TTY— название терминала, на котором запущена команда.TIME— объём потраченного процессорного времени.CMD— название команды, которая была использована для запуска процесса.
Для получения информации о всех процессах пользователя без привязки к текущему терминалу необходимо передать аргумент x:
$ ps x
PID TTY STAT TIME COMMAND
1291 ? Ssl 0:00 /usr/bin/syncthing -no-browser -no-restart -logflags=0
1512 ? SNl 2:55 /usr/bin/syncthing -no-browser -no-restart -logflags=0
4314 ? Ss 0:00 /lib/systemd/systemd --user
4315 ? S 0:00 (sd-pam)
4339 ? Ssl 0:00 /usr/bin/pipewire
4342 ? SNsl 0:00 /usr/libexec/tracker-miner-fs
...
В случае использования графического пользовательского интерфейса количество процессов будет достаточно большим. Для удобства его просмотра рекомендуется передавать вывод приложения ps в пейджер less.
Колонка STAT описывает состояние, в котором находится процесс. Рассмотрим ряд состояний:
R— работает. Процесс работает или может начать работать.S— спит. Процесс не работает, ожидает появления события. Например нажатия на клавиатуру.D— непрерывный сон. Процесс ожидает окончания операций ввода-вывода.T— остановлен. Процессу дана команду на остановку.Z— сломанный или «зомби» процесс. Процесс был завершён, но информация о нём не была обработана процессом-родителем.<— высоко приоритетный процесс. Данный процесс скорее всего будет выбран следующим для выполнения среди готовых к выполнению в случае выбора очередного процесса для выполнения.N— nice, низкоприоритетный процесс. Этот процесс является вежливым, и будет пропускать другие процессы вперёд в очереди на выполнение.
Задачи на использование приложения ps
#
- Отобразите список всех процессов, запущенных в системе.
- Отобразите список всех процессов, запущенных от имени вашего пользователя.
- Подсчитайте количество процессов, запущенных от имени вашего пользователя.
- Подсчитайте количество процессов, запущенных от имени пользователя root.
- Отобразите список всех процессов, указав следующую информацию:
- Уникальный идентификатор процесса.
- Идентификатор родительского процесса.
- Процент используемого процессорного времени.
- Процент используемой (резидентной) памяти процесса.
- Узнайте сколько процессорного времени было потрачено процессом
systemd. - Узнайте как долго работает процесс
systemd. - Найдите процесс с самой длинной командой запуска.
Интерактивный просмотр списка процессов в 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для выхода из приложения
Задачи на использование top
#
- Изучите ваш компьютер:
- Какой объём оперативной памяти доступен в системе?
- Какой объём раздела подкачки доступен в системе?
- Какой объём загрузки системы был за последние 5 минут?
- Какое количество процессоров есть в системе?
- Какой процесс в текущий момент потребляет больше всего процессорного времени?
- Какой процесс от пользователя root в настоящий момент потребляет больше всего оперативной памяти?
- Измените список активных столбцов на следующий:
- Номер процесса.
- Номер последнего использованного процессора.
- Процент использования процессора.
- Процент использования памяти.
- Номер контролирующего TTY.
Установите сортировку по проценту использования памяти.
Задачи в Bash, передний план и фоновый режим #
Документация #
Внимание! В будущем при сдаче работ не допускается наличие задач в фоне. Вы их можете использовать во время выполнения задач, однако по окончании работ все фоновые процессы должны быть остановлены.
Краткий обзор состояний процессов #
Подготовка к отправке сообщений #
Для изучения поведения приложения в различных состояниях нам потребуется интерактивное приложение и два активных терминала на одной виртуальной машине. В одном терминале у нас будет некоторое интерактивное приложение, а во втором мы будем отправлять данному приложению сигналы.
В качестве тестового приложения рассмотрим more с открытым большим текстовым файлом. В качестве файла можно использовать любой большой файл из предыдущих практических. Если у вас нет файла, то можно воспользоваться /var/log/dpkg.log.
Прерывание работы процесса #
Откройте большой текстовый файл с помощью приложения 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. Это имеет смысл для приложений, выполняющих вычисления, чтобы они продолжили свою работу. Это также разумно для приложений с графическим интерфейсом.
Задачи на фоновые процессы #
Запуск фоновых задач. #
- Запустите приложение
more.- Завершите работу данного процесса с помощью сочетания клавиш
Ctrl+C. - Удостоверьтесь, что вы можете выполнять команды в данном Bash-терминале. Удостоверьтесь, что в системе больше нет процессов
more.
- Завершите работу данного процесса с помощью сочетания клавиш
- Запустите приложение
moreв фоновом режиме.- Какой номер получило фоновая задача?
- Какой номер процесса был выдан данной задаче?
- Проверьте с помощью
psномер процесса дляmore.
- Отобразите список активных задач для данного Bash-терминала.
- Верните задачу №1 на передний план.
- Завершите процесс
more.
Приостановка процессов #
- Запустите приложение
more. - Приостановите работу приложения
moreс помощью сочетания клавишCtrl+Z. Что произошло? - Отобразите список задач для данного Bash-терминала. В каком состоянии находится текущая задача?
- С помощью приложения
psнайдите состояние процессаmore. - Продолжите работу приложения в фоновом режиме.
- Завершите работу текущего Bash-терминала. Что стало с приложением
more? Можно ли использовать фоновый процесс, чтобы организовать работу службы?
Сигналы #
Документация #
Краткий обзор сигналов #
Приложение kill
#
Приложение kill позволяет «убивать» процессы, в услугах которых мы больше не нуждаемся. Для его использования необходимо знать название процесса или его уникальный идентификатор.
$ kill NUMBER
Данное приложение не «убивает» приложение самостоятельно, а только посылает сигнал
ы приложению. Такие же действия происходят, когда мы нажимаем в консоли сочетания клавиш Ctrl+c или Ctrl+z. Только в последнем случае сигналы посылает сам эмулятор терминала, а не выделенное приложение.
Обзор сигналов #
| Номер | Название | Описание |
|---|---|---|
| 1 | HUP | Используется рядом служб, чтобы инициировать задачу перезагрузки конфигурации |
| 2 | INT | Прервать работу, аналогично нажатию Ctrl+c |
| 9 | KILL | Сигнал обрабатывается не приложением, а ОС. ОС экстренно завершает работу процесса |
| 15 | TERM | Сигнал по умолчанию, запрос приложению на завершение |
| 18 | CONT | Продолжить работу после получения сигнала STOP или TSTP |
| 19 | STOP | Запрос приложению на приостановку деятельности. Обрабатывается ОС |
| 20 | TSTP | Запрос приложению на приостановку, аналогичен нажатию клавиш Ctrl+z |
Для отправки конкретного сигнала приложению необходимо использовать формат kill -1 или kill -HUP.
Задачи, требуют графического интерфейса #
Если его нет, задачи можно не выполнять
- Запустите в фоновом режиме приложение
xlogo. - Отправьте процессу
xlogoсигналHUPс помощью приложенияkill.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом
- Запустите в фоновом режиме приложение
xlogo. - Отправьте процессу
xlogoсигналINTс помощью приложенияkill.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом
- Запустите в фоновом режиме приложение
xlogo. - Отправьте процессу
xlogoсигналSIGINTс помощью приложенияkill.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом
Задачu на использование приложения killall #
- Запустите в фоновом режиме приложение
xlogo. - Запустите в фоновом режиме приложение
xlogo. - Запустите в фоновом режиме приложение
xlogo. - Остановите все приложения с помощью приложения
killall.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом