Курс по сетевым технологиям
A A A

Что такое процессы? 

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

 

Для чего необходимо изучать процессы? 

Бывает так, что компьютер “тормозит” и не позволяет выполнять некоторые важные операции. Такое происходит, когда какой-нибудь процесс занимает большую часть оперативной памяти или процессорного времени. Зная основы работы с процессами можно отключить мешающий процесс и разгрузить компьютер. Существуют ситуации, когда запущенная программа перестает реагировать на действия пользователя и никак не удается ее закрыть штатным способом. В данном случае достаточно найти процесс данной программы и принудительно закрыть программу.  

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

 

PID - (process ID) идентификатор каждого процесса 

PPID - (parent process ID) идентификатор родительского процесса. Процесс может порождать и другие процессы. 

UID, GID - реальные идентификаторы пользователя и его группы, запустившего данный процесс. 

EUID, EGID - эффективные идентификаторы пользователя и его группы. В 16-ом уроке мы изучали признаки доступа SUID, SGID. Когда пользователь запускает файл с установленными признаками, то эффективные идентификаторы  (EUID, EGID) равны реальным идентификаторам (UID, GID) владельца данного файла. То есть система смотрит на эффективные идентификаторы и таким образом узнает, что был установлен признак SUID/SGID и предоставляет доступ пользователю. Если пользователь запустит любой другой файл без установленного признака SUID/SGID, то реальные и эффективные идентификаторы всегда равны. 

Priority/Nice - приоритет и относительный приоритет. Служит для выделения большего или меньшего процессорного времени для определенного процесса. Разрешается менять только относительный приоритет (Nice). Его значение варьируется от -20 до +19. Чем ниже значение относительного приоритета, тем больше процессорного времени выделяется для данного процесса. 

STAT - состояние процесса. В таблице представлены обозначения процессов:

Состояние

Описание

R (runnable)

Работающий процесс

S (sleeping)

Процесс в состоянии ожидания

T (stopping)

Остановленный процесс

Z (zombie)

Завершившийся процесс

В (uninterruptible)

Непрерывный процесс

 

Кроме того, помимо состояния самого процесса можно увидеть и дополнительную информацию (индикатор), которая следует сразу за символом состояния:

Индикатор

Описание

<

Процесс с высоким приоритетом

N

Процесс с низким приоритетом

L

Процесс имеет страницы, заблокированные в памяти

s

Процесс является лидером сессии

l

 

+

Процесс работает на переднем плане

 

Как же можно увидеть все процессы? 

Для этого существует команда ps. Однако в “чистом виде” она обычно не используется, поэтому применяются различные опции. Она имеет множество опций, причем некоторые используются с дефисом, а некоторые - без. Поэтому предлагаю просто запомнить наиболее используемые команды.

 

Список всех процессов - ps aux:

Список процессов


Отображение всех процессов, включая и PPID - ps -ef:

Отображение процессов с PPID


Отображение дерева процессов, то есть схематическое отображение от какого процесса был порожден конкретный процесс - ps auxf:

Дерево процессов

Из рисунка видно, что процесс /usr/sbin/mdm породил 2 процессы /usr/lib и cinnamon. 

Отображение дерева процессов, включая PPID - ps ajxf:

Дерево процессов с PPID

Взгляните внимательно на выделенный текст. Например, процесс 1358 - /usr/bin/py породил новый процесс cinnamon c PID=1375. Видно, что его родительский PPID = 1358 (в первой колонке). 

Более короткий вывод дерева процессов - pstree:

Дерево процессов


Отображение процессов конкретного пользователя - ps U пользователь:

Процессы пользователя

Вывод каждой команды частично отличается, частично совпадает. Кроме того, отображаются ненужные данные. 

 

Есть ли возможность использования универсальной и более удобной, команды чтобы не использовать тяжело запоминаемые опции? 

Конечно, такая команда существует и вот как она выглядит - ps -eo параметр_1, параметр_2, и так далееНапример, нам необходимо отобразить только пользователя и его процесс - ps -eo user,cmd:

 Кастомизация команды ps

 

Теперь отобразим пользователя, его UID, GID, идентификатор процесса, родительский идентификатор и название процесса - ps -eo user,uid,gid,pid,ppid,cmd:

Вывод процессов


Как видно можно выводом команды можно управлять и исключить ненужную информацию. Список параметров доступен на 1-ой странице встроенного мануала.



Завершение процесса 

Теперь, когда мы знаем номер процесса и программу, то мы можем ее принудительно закрыть.

 

Как это сделать? 

С помощью команд kill и killallУпрощенный формат команд выглядит так: 

kill PID_процесса 

killall имя_процесса

Есть небольшой нюанс в работе команд kill/killall. Процесс можно закончить разными способами. Для этого существуют различные сигналы.Чтобы узнать список всех доступных сигналов введи команду kill -l:

Список сигналов команды


Нам достаточно запомнить всего лишь 2 сигнала: TERM и KILL. 

TERM - “мягкое” завершение процесса и порожденных им процессов, все открытые файлы закрываются и ресурсы системы освобождаются. 

KILL - “грубое” завершение процесса. Все порожденные процессы останутся незавершенными и может привести к непредсказуемым последствиям. Поэтому данный способ лучше применять лишь в крайних случаях.

 

Как указать такой сигнал? 

По умолчанию всегда используется TERM, если нужно указать другой сигнал то используется следующий формат: 

kill -9 PID_процесса 

либо 

kill KILL PID_процесса 

Цифра означает номер сигнала при выводе списка командой kill -l.



Динамическое отображение процессов 

Команда ps полезна при поиске определенного процесса и общего представления загрузки системы. Однако у нее есть небольшой недостаток - выходные данные команды не обновляются. В то время, пока мы смотрим на процесс, он может уже закончится. То есть команда ps попросту делает мгновенный “снимок” процессов на момент исполнения команды.

 

Как получить автоматически обновляющийся список процессов? 

С помощью команды top:

Динамический список процессов

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

 

Что это за команды? 

Завершение процесса - клавиша “к”, затем введите номер процесса:

Завершение процесса

Отображение процессов конкретного пользователя - клавиша “U”, затем введите UID или имя пользователя:

Процессы пользователя

Результат команды выглядит так:

Процессы пользователя

Помощь - клавиша “h” или “?”:

Вызов справки

Выход из программы - клавиша “q” или Ctrl + C. Программа поддерживает много команд, поэтому предлагаю ознакомиться с ними самостоятельно при желании.



Просмотр открытых/задействованных файлов 

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

Для этого существует команда lsof. Она предоставляет следующую информацию: 

  • открытые файлы
  • запущенные команды, открывшие данный файл
  • пользователь, запустивший данную команду
  • номер процесса

 

Список всех открытых файлов - lsof:

Список всех открытых файлов

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

Список открытых файлов конкретной команды - lsof -c команда:

Список файлов конкретной команды


Данная команда полезна, когда в системе установлена новая программа и необходимо знать какие файлы она открывает. Возможно она открывает совсем не те файлы и это может быть вредоносное ПО.

Список открытых файлов конкретного процесса - lsof -p PID:


Список файлов определенного процесса

Запустив простую команду xclock (аналоговые часы) мы видим сколько файлов она открыла. Данная команда похожа на предыдущую. Только в данном случае исследуется отдельный процесс, в том время как lsof- c может исследовать и дочерние процессы.

Список открытых файлов конкретного пользователя - lsof -u пользователь:

Список открытых файлов пользователя student


Когда в системе зарегистрировано несколько пользователей, то полезно знать какие программы они запустили. Например, некоторые пользователи любят открывать много вкладок в интернет браузере (Chrome, Firefox). Естественно это нагружает систему. Недостаточно просто убить процесс “chrome” или “firefox”, так его используют все пользователи, просто одни меньше, а другие - больше. Данная команда поможет сузить зону поиска.



Сведения об используемой памяти

Оперативная память - free -h:

Отображение состояния RAM

Объем памяти жесткого диска - df -h:

Объем памяти жесткого диска

Команда отображает файловую систему, точку монтирования и память для каждой файловой системы. TMPSF временная файловая система, которая используется в оперативной памяти компьютера.

Объем занятой памяти конкретного каталога - du -h:

Объем памяти каталога Documents


Так как мы находимся в каталоге /home/student/Documents, то команда отображает все каталоги данного каталога. В конце списка указывается общий объем занятой памяти.

 

Можно ли отобразить только общий объем занятой памяти данного каталога? 

Конечно. Используйте опцию -s du -sh:

Отображение занятой памяти каталога Documents


Имейте в виду, что данная команды показывает объем памяти текущего каталога.

 

Список используемых команд: 

ps aux - список всех процессов на момент исполнения команды

ps -ef  -  отображение процессов, включая и PPID

ps auxf  - отображение дерева процессов

ps ajxf  - отображение дерева процессов, включая PPID

pstree - упрощенное отображение дерева процессов

ps U пользователь  - отображение процессов пользователя

ps -eo параметр_1, параметр_2, и так далее - отображение требуемого списка процессов

kill PID_процесса - завершение процесса по его идентификатору

killall имя_процесса - завершение процесса по его имени

kill -l - отображение списка доступных сигналов для завершения процессов

top - отображение динамического списка процессов

lsof - отображение списка открытых файлов

lsof -c команда - отображение списка открытых файлов указанной командой/программой

lsof -p PID - отображение списка открытых файлов указанного процесса

lsof -u пользователь - отображение списка открытых файлов указанного пользователя

free -h - отображение информации об использовании оперативной памяти

df -h - отображение информации об объеме памяти жесткого диска

du -h - подробное отображение информации о занимаемом объеме памяти текущим каталогом

du -sh - укороченное отображение информации о занимаемом объеме памяти текущим каталогом