Використання команд ps, kill та nice для управління процесами в Linux

На сервері Linux, як і на будь-якій іншій машині, можна запускати програми. Комп'ютер розглядає їх як так звані процеси.

У той час як Linux обробляє низькорівневе закадрове керування життєвим циклом процесу, користувачеві може знадобитися інший спосіб взаємодії з операційною системою для керування процесом на вищому рівні.

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

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

Найпростіший спосіб дізнатися, які процеси запущені на сервері в даний момент - використовувати команду top:

nice

Верхня частина виведеної інформації надає статистичні дані системи, а саме навантаження на систему та загальну кількість завдань.

Можна побачити, що 1 процес запущено, а 55 процесів перебувають у режимі очікування (інакше кажучи, простоюють, не використовуючи ресурси процесора).

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

Удосконалена версія команди top під назвою htop доступна у сховищах. Щоб встановити її, використовуйте цю команду:

Примітка – Для встановлення htop на centos необхідно використовувати такі команди:

Після встановлення репозиторію Epel встановимо htop:

Запустивши команду htop, можна побачити зручніше для користувача відображення інформації:

kill

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

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

При виклику без аргументів результати можуть бути трохи неповними:

Ці дані відображають усіпроцеси, пов'язані з поточним користувачем та термінальною сесією. Це має сенс, тому що в даний момент з терміналу запущені команди bash and ps.

Щоб отримати повнішу картину процесів даної системи, можна запустити наступне:

kill

Ці параметри наказують ps показати процеси, що належать всім користувачам (незалежно від їх терміналу) у зручному форматі.

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

nice

Як бачимо, процес kthreadd відображено як породжує щодо процесу ksoftirqd/0 та інших.

Примітка про ідентифікатори процесів (PID)

У Linux і Unix-подібних системах кожному процесу надано ідентифікатор (PID). Таким чином операційна система ідентифікує та відстежує процеси.

Швидкий спосіб дізнатися PID процесу – використовувати команду pgrep:

Це запросить ідентифікатор процесу та поверне його.

Перший породжений під час запуску процес під назвою init отримує PID «1».

Цей процес відповідає за породження решти процесів системи. Чим пізніше породжений процес, тим більше присвоєний йому PID.

Батьківський процес – це процес, відповідальний породження іншого процесу. Якщо процес, що породжує, був припинений, то дочірні процеси також перервуться. PID батьківського процесу називається PPID.

PID і PPID можна побачити в заголовках стовпців у багатьох програмах управління процесами, включаючи top, htop і ps.

Будь-яке спілкування між користувачем та операційною системою, пов'язане з процесами, передбачає переведення імен процесів у їх ідентифікатори та навпаки. Ось навіщо утиліти повідомляють PID.

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

Усі процеси в Linux відповідають сигнали.

Сигнали — спосіб завершити або змінити поведінку програм на рівні операційної системи.

Як надсилати процесам сигнали за допомогою PID

Найбільш поширеним способом передачі сигналів програм є команда kill.

Як і слід очікувати, функціональність даної утиліти за умовчанням полягає у спробі завершити процес:

Це надішле всім процесам сигнал TERM. Цей сигнал наказує процесу завершитись. Це дозволяє програмі виконувати операції з очищення та завершити роботу без перешкод.

Якщо програма несправна і не завершує роботу під час надсилання сигналу TERM, можна посилити сигнал, передавши сигнал KILL:

Цей спеціальний сигнал відправляється не програмі.

Натомість він передається ядру операційної системи, яке перериває процес. Це використовується для блокування програм, які ігнорують сигнали, що надсилаються ним.

Кожен сигнал має асоційований номер, який можна передати замість імені. Наприклад, можна відправити "-15" замість "-TERM" і "-9" замість "-KILL".

Як використовувати сигнали для інших цілей

Сигнали використовуються не лише для завершення роботи програм. Вони також корисні для інших дій.

Наприклад, багато демони можна перезапустити за допомогою сигналу відбою HUP. Apache є однією з програм, що працюють за таким принципом.

Наведена вище команда змусить Apache перезавантажити конфігураційний файл і відновити обслуговування контенту.

команд

Як надсилати сигнали процесам на ім'я

Хоча надсилати сигнали процесам набагато зручніше за допомогою PID, існують також методи надсилання сигналу за допомогою імен процесів.

Команда pkill працює майже також,як kill, але вона діє від імені процесу:

Команда, наведена вище, є еквівалентом:

Щоб надіслати сигнал кожному примірнику певного процесу, використовуйте команду killall:

Вищевказана команда надішле сигнал TERM кожному екземпляру firefox, запущеному на цьому комп'ютері.

Як встановити пріоритети процесів

Часто виникає потреба встановити, які процеси мають пріоритет у серверному середовищі.

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

Linux контролює пріоритети за допомогою значення під назвою niceness.

Завдання з високим пріоритетом мають найнижче значення, тому що вони поглинають ресурси. З іншого боку, завдання з низьким пріоритетом мають високе значення nice, оскільки вони використовують мінімальну кількість ресурсів.

Під час запуску команди top на початку статті було виведено стовпець, позначений як "NI". У ньому вказується значення nice процесу:

використання

Залежно від системи, значення nice може змінюватись від «-19/-20» (найвищий пріоритет) до «19/20» (найнижчий пріоритет).

Щоб запустити програму з певним значенням nice, можна використовувати команду nice:

Це працює лише при запуску нової програми.

Щоб змінити значення nice програми, яка вже виконується, потрібно використовувати інструмент renice:

Примітка : в той час як nice працює з ім'ям команди, renice викликає PID процесу.

Управління процесами – іноді досить складна для новачків тема, оскільки інструменти, що використовуються, відрізняються від їх графічних еквівалентів.

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