Просмотр и управление процессами

Просмотр и управление процессами #

Команды #

  • ps - отобразить список процессов в текущий момент времени.
  • kill - послать сигнал процессу.
  • killall - послать сигнал процессам по имени.

Процессы в Linux #

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

Процессы и зачем о них знать #

Понятие процесса является краеугольным в теории и практике работы операционных систем. Оно описывает работающее приложение, работающее под управлением операционной системы, выделенные ему ресурсы в определённый момент исполнения.

Современные ОС являются мультизадачными, т.е. они способны поддерживать иллюзию работы множества процессов на одном вычислительном процессоре. Это достигается путём прерывания работы процесса несколько раз в секунду с последующим выбором нового процесса для выполнения. С точки зрения пользователя создаётся впечатление, что одновременно выполняется несколько процессов.

Если процессов запущено слишком много, тогда возможны следующие ситуации:

  • Задачи медленно выполняются, т.к. запущено слишком много процессов.
  • Задачи медленно выполняются, т.к. недостаточно оперативной памяти.
  • Нужное приложение перестало отвечать на запросы от пользователя.
  • Невозможно запустить новую задачу.

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

Откуда берутся процессы #

Во время загрузки ОС сначала запускается ядро ОС, которое подготавливает оборудование для функционирования и свои внутренние структуры для запуска приложений. Затем ядро запускает init-процесс, который уже ответственен за запуск системных служб. Многие из этих служб продолжают работу в фоновом режиме и выключаются только вместе с завершением операционной системы.

Одной из таких служб является служба входа (текстового или графического) в систему. Когда пользователь успешно авторизуется в системе, то служба уже запускает процессы для его работы. В случае текстового интерфейса — эмулятор терминала и командный интерпретатор.

В рассмотренной схеме всегда участвуют два процесса: один запускает, а второй запускается. В рамках этого взаимодействия первый называется процессом-родителем, а второй процессом-ребёнком.

Операционная система отслеживает состояние всех процессов. В частности каждому процессу назначается его уникальный идентификатор, process ID, PID. 1 предназначен для процесса init. Другим назначаются свободные номера, зачастую в порядке увеличения номера.

Каждый процесс запускается от имени определённого пользователя и группы. Т.е. каждому процессу присваивается уникальный идентификатор пользователя и группы. В зависимости от этих значений процесс будет иметь соответствующие права по взаимодействию с файловой системой и другими частями ОС.

Просмотр списка процессов в Linux #

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

Ознакомьтесь с документацией на приложение 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 #

  1. Отобразите список всех процессов, запущенных в системе.
  2. Отобразите список всех процессов, запущенных от имени вашего пользователя.
  3. Подсчитайте количество процессов, запущенных от имени вашего пользователя.
  4. Подсчитайте количество процессов, запущенных от имени пользователя root.
  5. Отобразите список всех процессов, указав следующую информацию:
  • Уникальный идентификатор процесса.
  • Идентификатор родительского процесса.
  • Процент используемого процессорного времени.
  • Процент используемой (резидентной) памяти процесса.
  1. Узнайте сколько процессорного времени было потрачено процессом systemd.
  2. Узнайте как долго работает процесс systemd.
  3. Найдите процесс с самой длинной командой запуска.

Сигналы #

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

Краткий обзор сигналов #

Приложение 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. Отправка сигналов процессам (в графическом интерфейсе) #

Если его нет, задачи можно не выполнять

  1. Запустите в фоновом режиме приложение xlogo (альтернатива gwenview).
  2. Отправьте процессу xlogo сигнал HUP с помощью приложения kill.
    • Что произошло с процессом xlogo?
    • Что произошло с Bash-терминалом?
  3. Запустите в фоновом режиме приложение xlogo.
  4. Отправьте процессу xlogo сигнал INT с помощью приложения kill.
    • Что произошло с процессом xlogo?
    • Что произошло с Bash-терминалом?
  5. Запустите в фоновом режиме приложение xlogo.
  6. Отправьте процессу xlogo сигнал SIGINT с помощью приложения kill.
    • Что произошло с процессом xlogo?
    • Что произошло с Bash-терминалом?

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

  1. Запустите в фоновом режиме приложение xlogo.
  2. Запустите в фоновом режиме приложение xlogo.
  3. Запустите в фоновом режиме приложение xlogo.
  4. Остановите все приложения с помощью приложения killall.
    • Что произошло с процессом xlogo?
    • Что произошло с Bash-терминалом?

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