Linux notes #6 — Процессы

Процесс в Linux — это исполняемая программа

Самый простой способ увидеть запущенные процессы, запустить ps

[root@almalinux sysadmin]# ps
  PID TTY          TIME CMD
  41417 pts/0    00:00:00 sudo
  41425 pts/0    00:00:00 bash
  41426 pts/0    00:00:00 bash
  41946 pts/0    00:00:00 ps

Чтобы увидеть больше информации о процессах можно воспользоваться

ps -ef
или
ps -aux

Данные опции позволят дополнительно увидеть PID (идентификатор процесса), время запуска, команды, с помощью которых был запущен процесс и другое.

Запустим команду ниже (опции less и -S добавляют удобства при просмотре) и рассмотрим некоторые значения

 ps -aux | less -S

USER         PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND

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

PID — идентификатор процесса (для каждого свой). При завершении программа освобождает PID и позже он может быть занят уже другой программой. По сути PID нужны нам для управления процессами.

CPU — процентное использование процессора процессом

MEM — процентное использование оперативной памяти процессом

START — время, когда процесс был запущен

TIME — общее время выполнения процесса

COMMAND — команда, которая была использована для запуска процесса

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

watch "ps -aux | grep bash"

watch (по умолчанию каждые 2 секунды) обновляет вывод другой команды, по сути практически в режиме реального времени, мы можем отследить работу процесса

procfs — виртуальная файловая система, представляющая информацию о системе и процессах через файлы и каталоги (в Linux — все есть файл). Создается ядром и монтируется в /proc

[root@almalinux sysadmin]# cd /proc/
[root@almalinux proc]# ls
[root@almalinux proc]# cat version
Linux version 5.14.0-362.13.1.el9_3.x86_64 (mockbuild@x64-builder01.almalinux.org) (gcc (GCC) 11.4.1 20230605 (Red Hat 11.4.1-2), GNU ld version 2.35.2-42.el9) #1 SMP PREEMPT_DYNAMIC Thu Dec 21 07:12:43 EST 2023
[root@almalinux proc]# cat loadavg
0.00 0.00 0.00 1/309 42797

Здесь мы можем посмотреть информацию о версии ядра или среднюю загрузку системы

Для более информативного отображения есть утилита top и htop 

Для установки htop в Alma

htop
dnf install epel-release -y
dnf install htop -y

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

Запустим top и пройдемся по основным параметрам

top - 13:22:13 up  1:33,  1 user,  load average: 0.00, 0.00, 0.00
Tasks: 178 total,   1 running, 177 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.2 us,  0.2 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
MiB Mem :   7675.9 total,   6303.9 free,    813.2 used,    824.8 buff/cache
MiB Swap:   8076.0 total,   8076.0 free,      0.0 used.   6862.7 avail Mem

PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND

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

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

Строки дальше посвященные CPU и RAM надеюсь понятны.

Для завершения процесса можно использовать команду kill

kill отправляет сигнал завершения (SIGTERM). В случае если процесс не реагирует, его можно завершить принудительно (SIGKILL) с помощью kill -9

Откроем второй терминал и запустим nano. Найдем его в списке процессов и в первом терминале выполним

[root@almalinux proc]# kill 43284

Во втором терминале nano закроется и мы увидим

[root@almalinux sysadmin]# nano
Received SIGHUP or SIGTERM
[root@almalinux sysadmin]#

Далее откроем nano еще раз и выполним

kill -9 43286

Во втором терминале мы увидим

Killed
[root@almalinux sysadmin]#

Что касается htop, то принцип его работы схож с top, лично я использую его чаще, так как выглядит приятнее и информативнее, в нем удобнее сортировать процессы, но в целом, это уже дело вкуса