Отримайте миттєвий знімок активних процесів у вашій системі Linux за допомогою команди `ps`. Ця потужна утиліта дозволяє знаходити процеси за різними критеріями, включаючи ім’я, користувача або навіть термінал, з необхідним рівнем деталізації. Давайте розглянемо, як це працює.
Управління процесами в операційній системі Linux
В основі кожної системи Linux та інших Unix-подібних систем лежить ядро. Однією з багатьох його функцій є розподіл системних ресурсів, таких як оперативна пам’ять та обчислювальний час процесора. Ці ресурси розподіляються в реальному часі, забезпечуючи справедливу частку для кожного запущеного процесу з урахуванням його пріоритету.
Іноді процеси можуть зависати, входити в нескінченний цикл або не реагувати з інших причин. Інші можуть працювати нормально, але використовувати надмірну кількість обчислювального часу або оперативної пам’яті. Іноді, найгуманнішим рішенням є завершення процесу. Першим кроком завжди є ідентифікація процесу, що викликає проблеми.
Можливо, ви просто хочете ознайомитися зі списком процесів, що працюють на вашому комп’ютері. Команда `ps` задовольняє обидві ці потреби. Вона надає інформацію про те, що відбувається “прямо зараз” у вашій системі.
Команда `ps` є дуже гнучкою і дозволяє відображати саме потрібну вам інформацію в необхідному форматі. Вона має безліч опцій, і ми розглянемо основні з них. Якщо вам потрібно глибше зануритися в можливості `ps`, ця стаття допоможе вам краще зрозуміти сторінку man.
Перегляд списку процесів
Найпростіший спосіб використання `ps` – запустити її без аргументів:
ps
Команда `ps` показує список процесів, запущених користувачем, який її виконує.
Вивід складається з чотирьох стовпців:
- PID: Ідентифікаційний номер процесу.
- TTY: Назва терміналу, з якого запущено процес.
- TIME: Сумарний час обробки процесора, використаний процесом.
- CMD: Назва команди, що запустила процес.
Виведення процесів усіх користувачів
Використовуючи опцію `-e` (вибрати всі процеси), `ps` виведе процеси, запущені усіма користувачами, а не лише тим, хто виконує команду. Оскільки список буде досить довгим, скористаємося `less` для його перегляду.
ps -e | less
Вивід команди передається в `less`.
Список процесів став довшим, але стовпці залишилися тими самими. Записи зі знаком питання `?` в стовпці TTY не були запущені з терміналу.
Відображення ієрархії процесів
Іноді корисно побачити, які процеси запустили інші процеси. Це може допомогти виявити проблему або ідентифікувати певний процес. Для цього використовується опція `-H` (ієрархія).
ps -eH | less
Відступи показують, які процеси є батьківськими для інших процесів.
Для наочності можна використати опцію `–forest`, яка покаже ієрархію процесів у вигляді дерева з використанням символів ASCII.
ps -eH --forest | less
Таке представлення полегшує відстеження ієрархічних зв’язків між процесами.
Пошук процесів за назвою
Можна використовувати `grep` для пошуку процесів за назвою. Наприклад, для пошуку процесів, що містять “firefox” у назві, використовуємо:
ps -e | grep firefox
Вивід показує один процес, що відповідає критеріям пошуку. Якщо б було запущено кілька екземплярів Firefox, у списку було б кілька рядків.
Відображення додаткової інформації про процеси
Для отримання додаткової інформації про процеси використовуйте опцію `-f` (повний формат).
ps -ef | less
З’явилися додаткові стовпці з інформацією.
Нові стовпці:
- UID: Ідентифікатор користувача, що є власником процесу.
- PID: Ідентифікатор процесу.
- PPID: Ідентифікатор батьківського процесу.
- C: Кількість дочірніх процесів.
- STIME: Час початку процесу.
- TTY: Назва терміналу, з якого запущено процес.
- TIME: Загальний час, витрачений процесом на обробку процесором.
- CMD: Назва команди, що запустила процес.
Опція `-F` (дуже повний формат) надає ще більше стовпців:
ps -eF | less
Для перегляду всіх стовпців потрібно прокрутити екран вбік.
Натискання клавіші «Стрілка вправо» прокрутить вивід вліво.
Тепер список стовпців виглядає так:
- UID: Ідентифікатор користувача, що є власником процесу.
- PID: Ідентифікатор процесу.
- PPID: Ідентифікатор батьківського процесу.
- C: Кількість дочірніх процесів.
- SZ: Розмір образу процесу в сторінках RAM.
- RSS: Розмір резидентного набору (не свопірувана фізична пам’ять, що використовується процесом).
- PSR: Процесор, якому призначено процес.
- STIME: Час початку процесу.
- TTY: Назва терміналу, з якого запущено процес.
- TIME: Загальний час, витрачений процесом на обробку процесором.
- CMD: Назва команди, що запустила процес.
Перелік процесів за ідентифікатором
Маючи ідентифікатор процесу, ви можете отримати детальну інформацію саме про цей процес за допомогою опції `-p`.
ps -p 3403
Виводиться інформація про процес з ID 3403.
Можна перерахувати процеси, розділяючи їх ID пробілами.
Перегляд процесів за назвою команди
Опція `-C` (команда) дозволяє шукати процеси за назвою команди, яка їх запустила. Це відрізняється від повного командного рядка, що може включати шляхи, параметри і т.д.
ps -C shutter
Виводиться інформація про процес `shutter`.
Показ процесів, що належать певному користувачу
Для перегляду процесів, що належать певному користувачу, використовуйте опцію `-u` (список користувачів):
ps -u mary
Показані процеси, що належать користувачу `mary`.
Виведення процесів за терміналом
Для перегляду процесів, пов’язаних з певним терміналом, використовуйте опцію `-t` (вибір TTY). Якщо `-t` використовується без номера TTY, будуть показані процеси, пов’язані з поточним вікном терміналу.
tty
ps -t
Команда `tty` показує, що це псевдотермінал `0`. Процеси, виведені `ps -t`, пов’язані з `pts/0`.
Якщо передати номер TTY в командному рядку, виведеться звіт про процеси, пов’язані з цим TTY.
ps -t 1
Цього разу, всі процеси пов’язані з `TTY pts/1`.
Вибір стовпців для відображення
З опцією `-o` (формат) ви можете вибрати, які стовпці будуть виведені командою `ps`. Стовпці вказуються за назвою. Список доступних назв стовпців можна знайти на сторінці man. Наприклад, щоб вивести час CPU (pcpu) та командний рядок з аргументами (args), використаємо:
ps -e -o pcpu,args | less
Вивід містить тільки вказані стовпці.
Сортування результату за стовпцями
Вивід можна сортувати за допомогою опції `–sort`. Наприклад, щоб відсортувати вивід за стовпцем CPU:
ps -e -o pcpu,args --sort -pcpu| less
Дефіс “-” перед `pcpu` вказує, що сортування буде в порядку спадання.
Щоб побачити 10 процесів, що використовують найбільше CPU, передамо вивід через команду `head`:
ps -e -o pcpu,args --sort -pcpu | head -10
Отримано відсортований список перших 10 процесів.
Можна сортувати за кількома стовпцями. Додамо стовпець `pmem` (відсоток пам’яті, що використовується процесом). Без дефіса або з плюсом `+` порядок сортування буде зростаючим.
ps -e -o pcpu,pmem,args --sort -pcpu,pmem | head -10
Отримали додатковий стовпець, і сортування відбувається спочатку за `pcpu` (спадання), а потім за `pmem` (зростання).
Для більшої зручності, додамо стовпець ідентифікатора процесу (pid), щоб було видно номер кожного процесу:
ps -e -o pid,pcpu,pmem,args --sort -pcpu,pmem | head -10
Тепер можна ідентифікувати процеси.
Завершення процесів за ідентифікатором
Після того, як процес ідентифіковано, його можна завершити за допомогою команди `kill`, використовуючи його ID. Наприклад, щоб завершити процес з ID 898, використовуйте:
sudo kill 898
Якщо все пройшло успішно, процес буде завершено без повідомлень.
Завершення процесів за назвою
Команда `pkill` дозволяє завершувати процеси за їх назвою. Обов’язково перевірте, що ви ідентифікували саме потрібний процес! Наприклад, для завершення процесу `top`:
sudo pkill top
Знову ж таки, відсутність повідомлення означає успішне завершення.
Завершення декількох процесів за назвою
Якщо запущено кілька копій процесу або процес породив декілька дочірніх процесів (наприклад, Google Chrome), ви можете їх завершити командою `killall`.
Припустимо, у нас запущено два екземпляри `top`:
ps -e | grep top
Команда `killall` завершить обидва процеси:
sudo killall top
Відсутність повідомлення означає, що обидва процеси завершено.
Динамічний перегляд процесів з `top`
Команда `ps` надає статичний знімок стану. Для динамічного перегляду використовуйте `top`. Він показує оновлюваний список процесів у вашій системі. Екран складається з панелі інструментів у верхній частині та таблиці процесів внизу.
Запустимо `top`:
top
Стовпці таблиці містять наступну інформацію:
- PID: Ідентифікатор процесу.
- USER: Ім’я власника процесу.
- PR: Пріоритет процесу.
- NI: Значення nice процесу.
- VIRT: Об’єм віртуальної пам’яті, що використовується процесом.
- RES: Об’єм резидентної пам’яті, що використовується процесом.
- SHR: Об’єм спільної пам’яті, що використовується процесом.
- S: Стан процесу.
- %CPU: Відсоток часу CPU, що використовується процесом з моменту останнього оновлення.
- %MEM: Відсоток фізичної пам’яті, що використовується процесом.
- TIME+: Загальний час CPU, витрачений процесом у сотих частках секунди.
- COMMAND: Назва команди або командний рядок. Якщо стовпець COMMAND не видно, натисніть “Стрілка вправо”.
Можливі стани процесу:
- D: Безперервний сон.
- R: Виконується.
- S: Спить.
- T: Відстежено (зупинено).
- Z: Зомбі.
Натисніть клавішу `Q`, щоб вийти з `top`.
Перед завершенням процесу
Переконайтеся, що ви знайшли саме потрібний процес, і що його завершення не призведе до проблем. Зокрема, варто перевірити ієрархію процесів за допомогою опцій `-H` та `–forest`, щоб переконатися, що немає важливих дочірніх процесів, про які ви забули.