Процессы в Linux. Как посмотреть список запущенных программ?

процессы в linux. как  посмотреть список запущенных программ?

Иерархия процессов

Когда разговор ведется о процессах в вольных публикациях или профессиональной литературе можно встретить ряд слов, используемых как синонимы: процесс, программа, команда, задача и т.д. Нужно отметить, такое «размывание терминов» допустимо, но не совсем корректно. Например, по исторически сложившемуся сленгу, задачей является программа, которая запущена через терминал в фоновом режиме, в то время как понятие «программа» подразумевает под собой скомпилированный исходный код или скрипт командной оболочки. Отличие в том, что программа может существовать в виде файла, но не быть запущенной.

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

Каждый процесс, зарегистрированный в системе, получает уникальный идентификационный номер PID (англ. process identifier). Linux устроен так, чтобы у каждого процесса был родитель, который может следить за его состоянием. Это позволяет системе быть устойчивой к отказам. Например, если в дочернем процессе произошла логическая ошибка, и он перестал отвечать, родитель может уничтожить его и пересоздать.

Получить дерево процессов можно с помощью команды pstree. Она выводит в терминал структуру, построенную из графических примитивов. Дочерние процессы лежат в ней правее и соединены линиями с родителями. Обратите внимание на пример, приведенный ниже. Если пройти по иерархии родителей, в итоге мы доберемся до единственного процесса с именем systemd или init (в зависимости от дистрибутива). Это первый процесс, стартующий при инициализации системы. Именно он в дальнейшем запустит важнейшие фоновые задачи и станет их родителем.

pstree
systemd─┬─ModemManager─┬─{gdbus}
        │              └─{gmain}
        ├─NetworkManager─┬─dhclient
        │                ├─dnsmasq
        │                ├─{gdbus}
        │                └─{gmain}
        ├─accounts-daemon─┬─{gdbus}
        │                 └─{gmain}
        ├─acpid
        ├─agetty
        ├─aptd───{gmain}
        ├─avahi-daemon───avahi-daemon
        ├─bluetoothd
        ├─colord─┬─{gdbus}
        │        └─{gmain}
        ├─cron
        ├─dbus-daemon
...

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

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

#запуск текстового редактора в фоновом режиме
gedit &
[1] 18009

#вывод процессов текущего пользователя
ps
  PID TTY          TIME CMD
17585 pts/2    00:00:00 bash
18009 pts/2    00:00:00 gedit
18017 pts/2    00:00:00 ps

#вывод всех доступных процессов в системе
ps -A
  PID TTY          TIME CMD
    1 ?        00:00:03 systemd
    2 ?        00:00:00 kthreadd
    3 ?        00:00:00 ksoftirqd/0
    5 ?        00:00:00 kworker/0:0H
    6 ?        00:00:00 kworker/u16:0
    7 ?        00:00:02 rcu_sched
...

Команда top осуществит вывод таблицы со списком текущих процессов. Она заблокирует терминал и будет обновлять данные через небольшие промежутки времени. Помимо стандартной информации вывод будет содержать процентную долю загрузки процессора и объема оперативной памяти. Попасть в строку ввода команд можно, нажав клавишу «Q».

top
top - 21:06:38 up 55 min, 1 user, load average: 0,43, 0,39, 0,37
Tasks: 297 total, 1 running, 296 sleeping, 0 stopped, 0 zombie
%Cpu(s): 8,0 us, 3,7 sy, 0,0 ni, 87,7 id, 0,6 wa, 0,0 hi, 0,1 si, 0,0 st
КиБ Mem : 8053108 total, 2498960 free, 2685812 used, 2868336 buff/cache
КиБ Swap: 3145724 total, 3145724 free, 0 used. 4301488 avail Mem

PID   USER  PR   NI   VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
17841 user  20   0 1343340 256344 117508 S   6,0  3,2    0:44.75 chrome
17370 user  20   0 1991596 275916 124380 S   4,0  3,4    0:16.61 soffice.bin
1602  root  20   0 783500  169984 142912 S   3,6  2,1    1:20.18 Xorg
4447  user  20   0 1599440 326716 166692 S   3,0  4,1    3:23.22 chrome
4027  user  20   0 1487512 151976 64780  S   2,6  1,9    1:02.33 compiz
...

Заметка
В Linux помимо консольных программ получения списка процессов существуют и графические. Они отличаются в различных дистрибутивах. Например, в Linux/Ubuntu за такой функционал отвечает программа «системный монитор». Её можно вызвать через поиск или в окне терминала, введя команду «gnome-system-monitor».

Статусы процессов

Как вы могли заметить, вывод программы ps содержит поле «STAT», а в top присутствует поле «S» с аналогичным содержимым. Это статусы процессов. В один и тот же промежуток времени любой процесс может иметь только один статус.

Расшифровка статусов:

  • R — процесс выполняется или ожидает своей очереди.
  • D — непрерываемый сон. Процесс ожидает какого-либо события системы.
  • S — прерываемый сон. Процесс ожидает события, но может возобновить выполнение по сигналу.
  • T — процесс приостановил свое выполнение. Возможно, происходит отладка.
  • Z — часто называют «zombie». Означает своего рода «зависание». Скорее всего, такой процесс больше не выполнит ничего полезного, но останется зарегистрирован в системе по причине того, что не сможет отдать родителю код своего завершения.

Последние публикации