Просмотр и управление процессами #
Команды #
ps- отобразить список процессов в текущий момент времени.kill- послать сигнал процессу.killall- послать сигнал процессам по имени.
Процессы в 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, низкоприоритетный процесс. Этот процесс является вежливым, и будет пропускать другие процессы вперёд в очереди на выполнение.
Задача № 1. Просмотр информации о процессах с помощью ps
#
- Отобразите список всех процессов, запущенных в системе.
- Отобразите список всех процессов, запущенных от имени вашего пользователя.
- Подсчитайте количество процессов, запущенных от имени вашего пользователя.
- Подсчитайте количество процессов, запущенных от имени пользователя root.
- Отобразите список всех процессов, указав следующую информацию:
- Уникальный идентификатор процесса.
- Идентификатор родительского процесса.
- Процент используемого процессорного времени.
- Процент используемой (резидентной) памяти процесса.
- Узнайте сколько процессорного времени было потрачено процессом
systemd. - Узнайте как долго работает процесс
systemd. - Найдите процесс с самой длинной командой запуска.
Сигналы #
Документация #
Краткий обзор сигналов #
Приложение 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.
Задача № 2. Отправка сигналов процессам (в графическом интерфейсе) #
Если его нет, задачи можно не выполнять
- Запустите в фоновом режиме приложение
xlogo(альтернативаgwenview). - Отправьте процессу
xlogoсигналHUPс помощью приложенияkill.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом
- Запустите в фоновом режиме приложение
xlogo. - Отправьте процессу
xlogoсигналINTс помощью приложенияkill.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом
- Запустите в фоновом режиме приложение
xlogo. - Отправьте процессу
xlogoсигналSIGINTс помощью приложенияkill.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом
Задача № 3. Использование приложения killall
#
- Запустите в фоновом режиме приложение
xlogo. - Запустите в фоновом режиме приложение
xlogo. - Запустите в фоновом режиме приложение
xlogo. - Остановите все приложения с помощью приложения
killall.- Что произошло с процессом
xlogo? - Что произошло с Bash-терминалом?
- Что произошло с процессом