Смекни!
smekni.com

Керування процесами і роботами в Linux (стр. 2 из 2)

4. Пріоритети процесів

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

nice –число процес,

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

Пріоритет активного процесу з ідентифікатором PID можна змінити командою

renice –число PID.

Команда nice не завжди знижує пріоритет.д.ля його підвищення необхідно вказати від’ємне число.

Варто відзначити, що лише суперкористувач має таке право.

5. Завершення процесів

Для примусового завершення активного і фонових процесів використовуються різні способи. Як вже раніше відмічалось, активний процес можна ліквідувати, натиснувши клавіші <CTRL><C> або клавішу DEL.

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

kill PID

kill - signal PID

kill%n

Ця команда може брати як аргумент номер роботи, або ідентифікатор процесу. Наприклад, для завершення процесу із ідентифікатором PID=237 необхідно виконати команду

kill 237,

а для завершення роботи із номером 20 необхідно виконати команду

kill%20

Для перевірки ліквідації вказаного процесу, можна виконати команду

ps

в результаті чого на екрані дисплея отримаємо відповідь:

237 Terminated

А якщо виконати команду

jobs

тоді теж одержимо аналогічне підтвердження:

[20] + Terminated

Ключ “-signal” змушує команду kill виконати ряд додаткових послуг, тобто послати процесу певний сигнал. Може бути послано понад 20 сигналів, кожний з яких має свій номер.

При виході користувача із системи, Linux посилає всім його процесам сигнал 1, що змушує всі процеси завершити роботу. За замовчуванням усім процесам посилається сигнал 15.

Якщо ввести команду kill 0, то можна ліквідувати всі фонові процеси.

Якщо який-небудь процес “завис”, тоді потрібно перейти до іншої консолі, і з її допомогою ввести команду kill для ліквідації “завислого” процесу.

Гарантовано можна знищити процес за допомогою сигналу 9, наприклад:

kill - 9 125

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

Потім з пам'яті вилучаються сегменти коду і даних, а сам процес переходить у стан “зомбі” (у полі Stat такі процеси позначаються буквою “Z”). “Зомбі” не займає процесорного часу, але рядок у таблиці процесів залишається, і відповідні структури ядра не звільняються.

Якщо батьківський процес з якоїсь причини завершиться раніше дочірнього, останній стає “сиротою” (orphaned process). “Осиротілий” “зомбі” на короткий час стає нащадком init, після чого вже остаточно “помирає”.

Також, процес може впасти в “сон”, що не вдається перервати (у полі Stat це позначається буквою “D”). Процес, що знаходиться в такому стані, не реагує на системні запити і може бути знищений тільки перезавантаженням системи.

6. Корисна інформація про фонові процеси

Коли текстова оболонка типу bash завершує роботу, вона посилає в усі породжені нею процеси сигнал “відбій”. Якщо процес виконується у фоновому режимі, цей сигнал часто знищує його, що в більшості випадків небажано. Якщо Ви маєте намір запустити у фоновому режимі програму, яка повинна буде працювати і навіть після завершення батьківського процесу (звичайні фонові процеси при цьому завершуються), її потрібно запускати як глибокий фоновий процес командою nohup. Така команда має формат:

nohup команда &

Подібний запуск змушує зазначену аргументом команду ігнорувати сигнал відбою. Команда nohup має і побічний ефект: до значення nice додається п’ять. Уся вихідна інформація, яка генерує процес, якщо стандартний файл виведення і стандартний файл помилок не перепризначені, розміщуються у файлі nohup. out.

Демон (від англійського demon чи daemon) - це фоновий процес, що виконує системну задачу, непомітно для користувача і доповнює операційну систему будь-яким спеціальним сервісом. Ця програма не викликається користувачем у явній формі, а спокійно очікує в пам'яті певної події. У повній відповідності з пануючим у UNIX принципом модульності демони є програмами, а не частинами ядра. Багато демонів запускаються під час початкового завантаження і продовжують працювати увесь час, поки система включена. Інші демони запускаються при необхідності і працюють стільки, скільки передбачено їх функціями.

Демони можна знайти за допомогою команди

ps - ax

До основних демонів можна віднести init, inetd та cron.

Демон init - це перший процес, що запускається після початкового завантаження системи, і є предком майже всіх процесів, його PID завжди дорівнює 1),

Демон inetd керує іншими демонами. Раніше всі демони запускалися під час початкового завантаження операційної системи, і працювали безупинно (точніше, блокувалися при чеканні роботи). Згодом у систему вводилися все нові і нові демони. Їх стало стільки багато, що почали з’являтися проблеми з продуктивністю роботи системи. У відповідь фахівці BSD розробили inetd - демон відповідальний за запуск інших демонів по необхідності. Він запускає демони-клієнти, коли для них є робота, а після виконання задачі дозволяє їм тихо завершитись. Для того щоб працювати під керуванням inetd, клієнти повинні дотримуватись особливих правил: якщо конфігурація операційної системи із самого початку не передбачала використання inetd, то для його введення в систему необхідно модифікувати багато інших програм. Багато демонів можуть використовуватися або традиційним способом (тобто вони запускаються однократно і працюють до вимикання системи), або під контролем inetd.

Демон cron відповідає за виконання команд за графіком. Він обробляє файли з розкладом задач (cron-файли), створені як користувачами, так і адміністратором. Демон cron часто використовують в адміністративних задачах, таких, як керування обліковими файлами і файлами реєстрації, щоденне чищення файлової системи.

Використана література

1. Топхем Д., Чыонг Х.В. Юникс и Ксеникс. - М.: Мир, 1988. - 392 с.

2. Скловская С. Red Hat Linux 6.0 – Учебник. К.: “ДиаСофтЮП”, 1999. - 416 с.

3. Скловская С. Команды Linux: Справочник. - К.: “ДиаСофт”, 2001. - 688 с.

4. Глушаков С.В., Сурядный А.С. Linux для дома и офиса: Учебный курс. - Харьков: Фолио, 2002. – 389 с.