Як використовувати команду ps для моніторингу процесів Linux

Отримайте знімок процесів, запущених на вашому комп’ютері Linux, за допомогою команди ps. Знайдіть процеси за іменем, користувачем або навіть терміналом з такою кількістю або мінімальною кількістю деталей, які вам потрібно. Ми покажемо вам, як.

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

Серцем усіх операційних систем Linux і Unix-подібних є ядро. Серед його численних обов’язків є розподіл системних ресурсів, таких як оперативна пам’ять і час процесора. Ними потрібно жонглювати в режимі реального часу, щоб усі запущені процеси отримували свою справедливу частку відповідно до пріоритету кожного завдання.

Іноді завдання можуть блокуватися, увійти в жорсткий цикл або не відповідати з інших причин. Або вони можуть продовжувати працювати, але з’їдають занадто багато процесорного часу чи оперативної пам’яті, або ведуть себе таким же антисоціальним чином. Іноді завдання потрібно вбити, як милосердя до всіх причетних. Перший крок. Звичайно, це визначення процесу, про який йде мова.

Але, можливо, у вас взагалі немає проблем із завданням чи продуктивністю. Можливо, вам просто цікаво, які процеси виконуються у вашому комп’ютері, і ви хотіли б зазирнути під капот. Команда ps задовольняє обидві ці потреби. Це дає вам знімок того, що відбувається всередині вашого комп’ютера “прямо зараз.”

ps є достатньо гнучким, щоб надати вам саме потрібну інформацію у тому форматі, який ви хочете. Насправді, ps має дуже багато варіантів. Описані тут варіанти задовольнять більшість звичайних потреб. Якщо вам потрібно глибше заглибитися в ps, ніж ми розглянули в цій статті, ви побачите, що наш вступ робить сторінку man легше засвоювати.

Процеси листингу

Найпростіший спосіб використовувати ps – запустити його без параметрів:

ps

ps відображає список процесів, запущених користувачем, який виконав команду.

Чотири стовпці:

PID: Ідентифікаційний номер процесу.
TTY: назва консолі, на якій увійшов користувач.
ЧАС: кількість часу обробки ЦП, яку використав процес.
CMD: назва команди, яка запустила процес

Процес списку для всіх користувачів

додавши -e (вибрати всі процеси), ми можемо зробити ps перерахувати процеси, які були запущені всіма користувачами, а не лише користувачем, який виконує команду ps. Оскільки це буде довгий список, ми наведемо його на менше.

ps -e | less

Список процесів передається по каналу.

  Як використовувати DNSCrypt для шифрування DNS-трафіку в Linux

Ми маємо набагато більше записів у списку, але ми бачимо ті самі чотири стовпці, що й раніше. Записи зі знаком питання ? у стовпці TTY не були запущені з вікна терміналу.

Показ ієрархії процесів

Іноді це може допомогти з’ясувати проблему або визначити конкретний процес, якщо ви можете побачити, які процеси запустили інші процеси. Для цього ми використовуємо параметр -H (ієрархія).

ps -eH | less

Відступ вказує, які процеси є батьківськими для яких інших процесів.

Щоб додати трохи більше ясності, ми можемо попросити ps додати трохи ASCII лінії та намалювати ієрархію у вигляді дерева. Варіант для цього – опція –forest.

ps -eH --forest | less

Це полегшує відстеження, які процеси є батьками інших процесів.

Перерахування процесів за назвою

Ви можете передавати вихідні дані від ps через grep до записів списку які мають імена, що відповідають пошуковому терміну. Тут ми шукаємо записи, які відповідають пошуковому терміну «firefox»:

ps -e | grep firefox

У цьому випадку результатом є один запис для процесу, який нас цікавить. Звичайно, якби ми запустили кілька екземплярів Firefox, у списку було б повернуто більше одного елемента.

Показ додаткових стовпців у виводі

Щоб додати більше стовпців до виводу, використовуйте параметр -f (повний формат).

ps -ef | less

Додатковий набір стовпців включений у вихідні дані з ps.

Колонки:

UID: ідентифікатор користувача власника цього процесу.
PID: ідентифікатор процесу.
PPID: ідентифікатор батьківського процесу.
C: Кількість дітей, які має процес.
STIME: час початку. Час, коли розпочався процес.
TTY: назва консолі, на якій увійшов користувач.
ЧАС: кількість часу обробки ЦП, яку використав процес.
CMD: назва команди, яка запустила процес.

Використовуючи параметр -F (додатковий повний формат), ми можемо отримати ще більше стовпців:

ps -eF | less

Стовпці, які ми отримуємо цього разу, вимагають прокручування екрана вбік, щоб відкрити їх усі.

Натискання клавіші «Стрілка вправо» зміщує дисплей вліво.

Тепер ми отримуємо такі стовпці:

UID: ідентифікатор користувача власника цього процесу.
PID: ідентифікатор процесу.
PPID: ідентифікатор батьківського процесу.
C: Кількість дітей, які має процес.
SZ: Розмір на сторінках RAM образу процесу.
RSS: Розмір постійного набору. Це необмінна фізична пам’ять, яку використовує процес.
PSR: процесор, якому призначено процес.
STIME: час початку. Час, коли розпочався процес.
TTY: назва консолі, на якій увійшов користувач.
ЧАС: кількість часу обробки ЦП, яку використав процес.
CMD: назва команди, яка запустила процес.

Перелік процесів за ідентифікатором процесу

Знайшовши ідентифікатор процесу, який вас цікавить, ви можете використовувати його з командою ps, щоб перерахувати деталі цього процесу. Використовуйте параметр -p (вибір за ідентифікатором процесу), щоб досягти цього:

ps -p 3403

Деталі цього процесу перераховані:

  Як грати в Spelunky на Linux

Ви не обмежені одним ідентифікатором процесу. Ви можете надати список ідентифікаторів процесів, розділених пробілами.

Перерахування процесів за командою

Параметр -C (команда) дозволяє шукати процес за назвою команди. Тобто назва команди, яка запустила процес. Це трохи відрізняється від командного рядка, який може включати імена шляхів, параметри або параметри.

ps -C shutter

Перелічено деталі процесу затвора.

Перерахування процесів, які належать користувачу

Щоб побачити процеси, якими володіє певний користувач, використовуйте параметр -u (список користувачів):

ps -u mary

Відображаються процеси, якими володіє обліковий запис користувача mary.

Перерахування процесів за терміналами

Щоб побачити процеси, пов’язані з TTY, використовуйте параметр -t (вибір TTY). Опція -t, що використовується без номера TTY, повідомляє про процеси, пов’язані з поточним вікном терміналу.

tty
ps -t

Команда tty повідомляє, що це псевдотелетип 0. Усі процеси, перелічені за допомогою ps -t, пов’язані з TTY pts/0.

Якщо ми передаємо номер TTY у командному рядку, ми повинні отримати звіт про процеси, пов’язані з цим TTY.

ps -t 1

Цього разу всі процеси пов’язані з TTY pts/1.

Вибір стовпців для відображення

За допомогою параметра -o (формат) ви можете вибрати, які стовпці ви хочете включити до виводу з ps. Ви вказуєте стовпці за назвою. (Довгий) список імен стовпців можна побачити на сторінка людини у розділі під назвою «Стандартні специфікатори формату». У цьому прикладі ми вибираємо, щоб час ЦП (pcpu) і командний рядок з аргументами (args) були включені у вихідні дані.

ps -e -o pcpu,args | less

Вихідні дані містять лише два запитаних стовпці.

Сортування результату за стовпцями

Ви можете відсортувати вихідні дані за допомогою параметра –sort. Давайте відсортуємо вихідні дані за стовпцем CPU:

ps -e -o pcpu,args --sort -pcpu| less

Дефіс «-» у параметрі сортування pcpu надає порядок сортування за спаданням.

Щоб побачити десять процесів з найбільшою інтенсивністю процесора, передайте вихід через головку команда:

ps -e -o pcpu,args --sort -pcpu | head -10

Отримуємо відсортований, усічений список.

Якщо ми додамо більше стовпців на наш дисплей, ми зможемо сортувати за більшою кількістю стовпців. Давайте додамо стовпець pmem. Це відсоток пам’яті комп’ютера, який використовується процесом. Без дефіса або з плюсом «+», порядок сортування зростаючий.

ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10

Ми отримуємо наш додатковий стовпець, і новий стовпець включається в сортування. Перший стовпець відсортовано перед другим стовпцем, а другий — у порядку зростання, оскільки ми не поставили дефіс у pmem.

  Як запустити програму Linux під час запуску за допомогою systemd

Давайте зробимо його трохи кориснішим і додамо стовпець ідентифікатора процесу (pid), щоб ми могли бачити номер процесу кожного процесу в нашому списку.

ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

Тепер ми можемо визначити процеси.

Знищення процесів за ідентифікатором процесу

Ми розглянули низку способів ідентифікації процесів, включаючи ім’я, команду, користувача та термінал. Ми також розглянули способи ідентифікації процесів за їхніми динамічними атрибутами, такими як використання ЦП і пам’ять.

Таким чином, так чи інакше, ми можемо ідентифікувати процеси, які запущені. Знаючи їхній ідентифікатор процесу, ми можемо (якщо нам це потрібно) знищити будь-який із цих процесів за допомогою команди kill. Якби ми хотіли знищити процес 898, ми б використали такий формат:

sudo kill 898

Якщо все йде добре, процес тихо припиняється.

Процеси вбивства за назвою

Команда pkill дозволяє вбивати процеси за іменем. Переконайтеся, що ви визначили правильний процес! Ця команда завершить верхній процес.

sudo pkill top

Знову ж таки, відсутність новин – це хороші новини. Процес тихо припиняється.

Знищення кількох процесів за назвою

Якщо у вас запущено кілька копій процесу або процес породив кілька дочірніх процесів (як це може зробити Google Chrome), як ви можете їх знищити? Це так само легко. Ми використовуємо команду killall.

У нас є два примірники найпопулярнішого:

ps -e | grep top

Ми можемо припинити обидва з цією командою:

sudo killall top

Відсутність відповіді означає відсутність проблем, тому обидва ці процеси припинено.

Отримайте Dynamic View зверху

Результатом роботи ps є перегляд моментального знімка. Він не оновлюється. Щоб отримати оновлений уявлення про процеси, скористайтеся командою top. Він забезпечує а динамічний перегляд процесів, що виконуються на вашому комп’ютері. Дисплей складається з двох частин. У верхній частині екрана є панель інструментів, що складається з рядків тексту, а в нижній частині екрана — таблиця, що складається з стовпців.

Почніть зверху з цієї команди:

top

У колонках міститься інформація про процеси:

PID: ідентифікатор процесу
КОРИСТУВАЧ: Ім’я власника процесу
PR: Пріоритет процесу
Н.І.: Приємна цінність процесу
VIRT: Віртуальна пам’ять, що використовується процесом
RES: постійна пам’ять, що використовується процесом
SHR: Спільна пам’ять, що використовується процесом
S: Стан процесу. Перегляньте наведений нижче список значень, які може приймати це поле
%CPU: частка часу процесора, використаного процесом з моменту останнього оновлення
%MEM: частка використовуваної фізичної пам’яті
ЧАС+: загальний час ЦП, використаний завданням у сотих частках секунди
КОМАНД: назва команди або командний рядок (ім’я та параметри командного рядка) Якщо стовпець команди не видно, натисніть клавішу «Стрілка вправо».

Статус процесу може бути одним із:

D: Безперервний сон
Р: Біг
С: Спить
T: простежено (зупинено)
Z: Зомбі

Натисніть клавішу «Q», щоб вийти зверху.

Перш ніж вбити процес

Переконайтеся, що це саме той, кого ви шукаєте, і переконайтеся, що він не створить вам жодних проблем. Зокрема, варто перевірити параметри -H (ієрархія) та –forest, щоб переконатися, що в ньому немає важливих дочірніх процесів, про які ви забули.