Linux. Главное о процессах

Опубликовано:
Автор:
Обратите внимание

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

О процессах

Ядро Linux управляет многозадачностью посредством процессов. Именно с помощью процессов Linux организует приостановку программ и запускает их снова, когда наступит их очередь использовать процессор.

Принцип, по которому программа может запускать другие программы, выражается правилом: родительский процесс запускает дочерний процесс. Каждому процессу присваивается номер, который называют идентификатором процесса: Process ID или PID.

Подобно файлам, процессы также имеют идентификаторы владельца и пользователя, эффективный (или действующий) идентификатор пользователя и т. д.

Просмотр процессов

ps aux

или, чтобы просмотреть длинный список процессов

ps aux | less

x – вывести все процессы пользователя (независимо от терминала).

a – вывести список всех процессов в системе (совместно с опцией x)

u – вывести дополнительные поля (более подробная информация).

Заголовки столбцов
USER
Идентификатор пользователя. Это владелец процесса
PID
Идентификатор процесса
%CPU
Использование процессора в процентах
%MEM
Использование памяти в процентах
VSZ
Объем виртуальной памяти
RSS
Размер страниц памяти. Объем физической памяти (ОЗУ), используемой процессом, кб
TTY
Терминал управляющий процессом (может отсутствовать)
STAT
Текущее состояние процесса (подробнее ниже)
START
Время запуска процесса. Для значений свыше 24 часов выводится дата
TIME
Объем процессорного времени, потребленного процессом (сколько времени процессор обрабатывал этот процесс).
Состояния процессов STAT
R
Выполняется. Процесс выполняется или готов к выполнению
S
Приостановлен. Процесс временно не выполняется; скорее всего, находится в ожидании определенного события, такого как нажатие клавиши или прибытие сетевого пакета
D
Приостановлен без возможности прерывания. Процесс ожидает завершения операции ввода/вывода, например, дисковым устройством
T
Остановлен. Процесс принудительно остановлен
Z
Недействующий процесс-«зомби». Это дочерний процесс, который завершился, но не был удален родителем
<
Высокоприоритетный процесс. Потребляют больше процессорного времени, оставляя меньше другим процессам
N
Низкоприоритетный процесс. Получает процессорное время в последнюю очередь

Полная справка

man ps

Просмотр процессов в динамике

Чтобы увидеть работу компьютера в динамике, воспользуемся командой

top

h – вывести экран со справочной информацией

q – завершить работу программы (выход)

Рекомендуется установить и использовать улучшенный интерактивный полноэкранный монитор производительности atop. Если он установлен, выполните

atop

h – вывести экран со справочной информацией

g – generic info (default)

m – memory details

d – disk details

q – завершить работу программы (выход).

Управление процессами

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

CTRL+C – нажатие этой комбинации в терминале прерывает выполнение запущенной из терминала программы (в некоторых случаях сработатывает только SHIFT+CTRL+C). Фактически мы вежливо попросили программу завершиться. Таким способом можно прервать выполнение многих (но не всех) программ командной строки.

Перевод процессов в фоновый режим

Чтобы запустить программу сразу в фоновом режиме, нужно добавить в конец команды символ амперсанда

mc &
[1] 56108

В результате командная оболочка сообщает, что мы запустили задание с номером 1 и оно получило идентификатор процесса PID 56108.

Переменная $! содержит PID последнего процесса, запущенного в фоновом режиме.

echo $!
56108

Чтобы убедиться в наличии этого процесса, выполните команду

ps

Вывести список заданий, запущенных в терминале (чтобы переключиться)

jobs
[1]+ Running mc

Чтобы переключиться на mc выполните (%1 – номер фонового процесса из предыдущей команды)

fg %1

Чтобы перевести процесс переднего плана в фоновый режим нужно сначала приостановить процесс комбинацией CTRL+Z, а затем перевести его в фон командой:

bg %1

Теперь, если процесс может выполняться в фоновом режиме, он возобновит работу.

Для справки

Возможность перевода в фоновый режим полезна и в том случае, если при запуске программы с графическим интерфейсом из командной строки вы забыли добавить в конец команды символ &.

Запуская программу из командной строки, можно увидеть сообщения об ошибках, которые невидимы, когда программа запускается из графического интерфейса.

Сигналы

Команда kill используется для завершения процессов. Она позволяет принудительно завершить выполнение вышедшей из-под контроля программы, иcпользуя идентификатор процесса PID.

kill 56108
[1]+ Terminated mc

В действительности команда kill посылает сигналы процессам. Сигналы — один из нескольких способов, которыми операционная система общается с программами. Используя комбинации клавиш CTRL+C и CTRL+Z, мы посылаем процессам сигналы.

CTRL+C посылает сигнал INT (Interrupt — прервать).
CTRL+Z посылает сигнал TSTP (Terminal Stop — сигнал «стоп» с клавиатуры).

Наиболее типичный синтаксис команды kill имеет следующий вид: kill [-сигнал] PID. Сигнал можно указать по номеру или по имени. Если сигнал не указан, как в примере выше, то посылается сигнал TERM (terminate — завершить).

Часто используемые сигналы (в скобках указаны номера сигналов)
INT (2)
Завершить программу. Выполняет ту же функцию, что и нажатие комбинации CTRL+C в терминале.
QUIT (3)
Выйти из программы.
KILL (9)
Уничтожить. Этот сигнал не передается процессу, ядро принудительно и немедленно завершает указанный процесс. Сигнал KILL следует использовать только как крайнее средство.
TERM (15)
Завершить. Если программа еще «живая», она корректно завершится.
CONT (18)
Продолжить. Этот сигнал восстанавливает нормальную работу процесса после сигнала STOP
STOP (19)
Приостановить. Этот сигнал заставляет процесс приостановиться, не завершаясь. Подобно сигналу KILL, он не передается целевому процессу.
TSTP (20)
Этот сигнал посылается терминалом после нажатия комбинации CTRL+Z. В отличие от сигнала STOP, TSTP передается программе, и программа может решить игнорировать его
WINCH (28)
Изменение размеров окна. Некоторые программы, такие как top и less, реагируют на этот сигнал, обновляя свой вывод в соответствии с новыми размерами окна терминала

Чтобы прервать программу, можно выполнить

kill -INT 56108

или

kill -2 56108

Имена сигналов могут указываться с префиксом SIG

kill -SIGINT 56108

Процессы, подобно файлам, имеют владельцев, и чтобы послать сигнал процессу командой kill, вы должны быть владельцем процесса (или суперпользователем).

Полный список сигналов можно посмотреть, выполнив.

kill -l

Существует возможность с помощью команды killall послать сигнал сразу нескольким процессам.

Примеры

Просмотреть все запущенные процессы в системе

ps aux | less

Просмотреть все запущенные в системе процессы деревом (иерархия родительских и дочерних процессов)

ps –auxefw

Найти процессы по части имени

ps aux | grep mysqld

или

pgrep -l mysqld

Принудительно завершить процесс с идентификатором (PID) 56108

kill 56108