Відмінності між версіями «Управління процесами в Linux»

Матеріал з Вікі ЦДУ
Перейти до: навігація, пошук
Рядок 33: Рядок 33:
 
Процеси в Linux мають можливість обмінюватися так званими "сигналами" з ядром та іншими процесами. При отриманні сигналу процесом, управління передається підпрограмі його обробки, або ядру, якщо такий підпрограм немає. У Linux є команда '''kill''', яка дозволяє послати заданому процесу будь-який сигнал. Список сигналів можна отримати виконавши команду
 
Процеси в Linux мають можливість обмінюватися так званими "сигналами" з ядром та іншими процесами. При отриманні сигналу процесом, управління передається підпрограмі його обробки, або ядру, якщо такий підпрограм немає. У Linux є команда '''kill''', яка дозволяє послати заданому процесу будь-який сигнал. Список сигналів можна отримати виконавши команду
 
*'''kill -l'''. В результаті виконання цієї команди ви побачите список номерів і назв сигналів.
 
*'''kill -l'''. В результаті виконання цієї команди ви побачите список номерів і назв сигналів.
Для того, щоб послати певний сигнал заданому процесу, потрібно ввести:'''kill < -номер сигналу >''' номер PID вибраного процесу.
+
Для того, щоб послати певний сигнал заданому процесу, потрібно ввести:'''kill <номер сигналу> номер PID вибраного процесу'''.
 +
Наприклад, потрібно завершити роботу додатку Midnight Commander (mc).
 +
 
 +
1)Визначимо ідентифікатор процесу mc:
 +
ps -A | grep mc
 +
 
 +
Нехай PID= 11597.
 +
2)Посилаємо сигнал SIGQUIT (номер 3):
 +
kill -3 11597
 +
3)Після чого процес mc обробляє сигнал GIGQUIT  і завершується. Але, якщо mc "завис", то він не зможе завершитись, оскільки підпрограма обробки сигналу SIGQUIT не отримає управління.В таких випадках використовують сигнал під номером 9 (SIGKILL), який опрацьовується ядром операційної системи, і примусово завершить вказаний процес:
 +
kill -9 11597
 +
4)Якщо в команді  kill номер сигналу не задано, то використовується SIGKILL, тобто, попередню команду можна було ввести як kill PID:
 +
kill 11597
 +
    При завершении процесса завершаются и порожденные им процессы.
 +
 
 +
    Для завершения процесса по имени используется команда killall:
 +
killall mc - завершить процесс, в имени которого есть "mc"
 +
killall -u user - завершить процессы, порожденные пользователем user

Версія за 11:14, 6 травня 2014

Подивитися список завдань в Linux можна за допомогою команди ps. Якщо її запустити без параметрів, то вона видає список процесів, запущених у поточному сеансі користувача. Повний список опцій можна отримати стандартно - виконавши ps --help.

Приклади використання:

  • ps -A - виводить список процесів з ідентифікаторами(PID) та їх іменами, або:
  • ps -ax - виводить список процесів, з повним рядком запуску;
  • ps -U user - список процесів породженим самим користувачем user;
  • ps T - список задач, які пов'язані з поточним терміналом;
  • ps t ttyN -список задач, пов'язаних з терміналом N;

Якщо список завдань великий, а нас цікавить стан однієї або кількох завдань, можна скористатися grep:

  • ps -U root | grep ppp - виводидь список завдань, які мають "ppp" в імені;

Для отримання відомостей про використання ресурсів комп'ютера можна скористатися командою top: Команда Топ Бабіч.jpg

У верхній частині вікна виводяться сумарні дані про стан системи - поточний час, час з моменту завантаження системи, число користувачів в системі, число процесів в різних станах, дані про використання процесора і пам'яті.

Нижче виводиться таблиця, що характеризує окремі процеси. Число рядків, що відображаються в цій таблиці, визначається розміром вікна. Вміст вікна оновлюється кожні 3 секунди. Натиснення клавіші h виводить довідку по командах, які дозволяють змінити формат даних що відображаються і управляти деякими параметрами процесів у системі:

  • s або d - змінити інтервал оновлення вікна;
  • z - кольорове/чорно-біле відображення;
  • nабо # - кількість процесів які відображаються;

Можна відсортувати список процесів по використанню процесів процесора (P), пам'яті (M), часу виконання (T) и т.п.

Однак, є й більш корисні команди, які дозволяють управляти процесами в інтерактивному режимі:

  • k- зняти (kill) задачу. За цією командою буде відправлено запит на ідентифікатор процесу (PID), після введення якого, процес буде завершений.
  • r - змінити поточний пріоритет завдання (renice). Як і при виконанні попередньої команди, буде запитаний PID, і потім, нове значення пріоритету (відображається в колонці NI). Діапазон значень пріоритетів - від мінус 20 (найвищий) до плюс 19. Від'ємні значення і 0 може встановлювати тільки користувач root.

Для виходу з top потрібно натиснути клавішу q. Команда kill. Ці ж дії (примусове завершення процесу і зміна його пріоритету) можна виконати і без команди top.

Процеси в Linux мають можливість обмінюватися так званими "сигналами" з ядром та іншими процесами. При отриманні сигналу процесом, управління передається підпрограмі його обробки, або ядру, якщо такий підпрограм немає. У Linux є команда kill, яка дозволяє послати заданому процесу будь-який сигнал. Список сигналів можна отримати виконавши команду

  • kill -l. В результаті виконання цієї команди ви побачите список номерів і назв сигналів.

Для того, щоб послати певний сигнал заданому процесу, потрібно ввести:kill <номер сигналу> номер PID вибраного процесу. Наприклад, потрібно завершити роботу додатку Midnight Commander (mc).

1)Визначимо ідентифікатор процесу mc: ps -A | grep mc

Нехай PID= 11597. 2)Посилаємо сигнал SIGQUIT (номер 3): kill -3 11597 3)Після чого процес mc обробляє сигнал GIGQUIT і завершується. Але, якщо mc "завис", то він не зможе завершитись, оскільки підпрограма обробки сигналу SIGQUIT не отримає управління.В таких випадках використовують сигнал під номером 9 (SIGKILL), який опрацьовується ядром операційної системи, і примусово завершить вказаний процес: kill -9 11597 4)Якщо в команді kill номер сигналу не задано, то використовується SIGKILL, тобто, попередню команду можна було ввести як kill PID: kill 11597

   При завершении процесса завершаются и порожденные им процессы.
   Для завершения процесса по имени используется команда killall:

killall mc - завершить процесс, в имени которого есть "mc" killall -u user - завершить процессы, порожденные пользователем user