Короткі теоретичні відомості. Тема: Процеси в ОС Linux і керування ними.
Тема: Процеси в ОС Linux і керування ними.
Мета: Оволодіння практичними навичками роботи з процесами — створення і знищення, керування процесами і їхній аналіз.
Прилади та обладнання: комп’ютер.
Короткі теоретичні відомості
Linux – багатозадачна система з розділенням часу. Це означає, що в системі одночасно виконується багато процесів. Кожний процес асоційований з певним користувачем, від імені якого цей процес діє. Для того, щоби переглянути список процесів, існує команда ps. Ця команда має багато ключів-модифікаторів, які визначають, яку саме інформацію про процеси повинна виводити команда.
Типові ключі:
a - виводить інформацію про всі процеси всіх користувачів;
u - виводить інформацію про всі процеси власника;
x - виводять розширену інформацію про процес.
Наприклад: ps aux - отримати повну інформацію про всі процеси;
ps axjf -перегляд дерева процесів.
Команда ps без аргументів дає список лише процесів даного користувача і (в деяких системах) лише пов’язаних з конкретним терміналом.
Динамічне оновлення процесу можна переглянути командою top .
Кожний процес в системі має свій унікальний ідентифікатор – PID. За цим ідентифікатором можна звертатись до процесу. Крім того, кожний процес виникає не сам по собі – він має так званий батьківський процес, що характеризується ідентифікатором PPID (parent process ID). Таким чином утворюється ієрархія процесів, що бере початок від початкового процесу init.
Процеси можуть взаємодіяти між собою за допомогою так званих сигналів. Існує обмежена кількість сигналів, які мають свої числові ідентифікатори і мнемонічні позначення. Сигнали діють як переривання, тобто вони призупиняють процес, від якого вони направлені, і викликають відповідний обробник сигналу. Деякі із сигналів мають чітко визначене значення і обробляються системним обробником. Інші можуть перехоплюватись процесом, тобто процес може встановлювати для цих
сигналів свій обробник. Звичайно, існують певні узгодження щодо призначення певних сигналів, і програмістам слід дотримуватись їх при розробці своїх обробників.
Користувач також може відправити процесу сигнал, для цього існує команда kill. Формат команди:
kill [-<сигнал>] <PID>
<сигнал> – це мнемонічне або числове позначення сигналу (наприклад, TERM, 9), а <PID> –ідентифікатор процесу, якому посилають сигнал.
Сигнал | Символьне представлення | Дія |
-HUP | Процес повинен бути завершений | |
-TERM | М’яке заверщення з видалення проміжних процесів | |
-KILL | Зупинити всі дії і завершити роботу |
Якщо не вказати параметр <сигнал>, то буде відправлено сигнал завершення процесу TERM (15). Цей сигнал може перехоплюватись процесом, але існує сигнал KILL (9), який не перехоплюється і безумовно знищує процес (якщо у користувача є достатньо для цього прав). Таким чином можна зупинити будь-який свій процес, якщо над ним втрачене керування (або процес “завис”, що у системі Linux трапляється дуже рідко. Для цього слід зайти з іншої консолі (віртуального або фізичного терміналу) і дати команду:
kill -9 <PID>, де <PID> можна дізнатись за допомогою попередньої команди ps.
При роботі в графічній оболонці, а також при роботі на персональному комп’ютері, де підтримується певна кількість так званих віртуальних терміналів, користувач може працювати в системі, використовуючи одночасно кілька терміналів (наприклад, на персональних комп’ютерах між ними можна переключатись комбінаціями клавіш Ctrl+Alt+F#, де F# – одна з функціональних клавіш).
Коли користувач дає команду з консолі, в системі запускається процес, або кілька процесів. Якщо в командному рядку утворюється конвеєр (наприклад, ls –l | less), то всі процеси (у нашому прикладі ls і less) запускаються одночасно. Разом вони складають так зване завдання. Завдання пов’язано з терміналом. Поки воно не завершиться, користувач не має можливості вводити наступну команду. Це так званий пріоритетний (foreground) режим виконання завдання.
Щоби під час виконання завдання мати можливість запускати інше завдання, перше з них слід запустити в так званому фоновому (background) режимі. Для того, щоби запустити завдання в фоновому режимі, слід завершити рядок команди символом “&” (після пробілу). При цьому стандартний ввід за замовчуванням назначається порожньому файлу /dev/null .
Слід врахувати, що завдання в фоновому режимі може намагатись здійснювати вивід на екран, заважаючи при цьому виводу пріоритетного процесу (спробуйте працювати, запустивши у фоновому режимі команду ping). Тому слід подбати, щоби фонові завдання здійснювали вивід у файли.
Завдання, що було запущено у пріоритетному режимі, можна перевести у фоновий. Для цього необхідно спочатку призупинити виконання завдання (комбінація клавіш CTRL-Z). Далі можна поновити виконання завдання у пріоритетному режимі (команда fg <№ завдання>) або у фоновому (команда bg <№ завдання>).
Завдання мають свої номери. Переглянути їх можна за допомогою команди jobs.
Переглянути список відкритих файлів можна за допомогою команди lsof (lsof -u).
Переглянути інформацію про оперативну пам’ять можна за допомогою команди free.
Переглянути інформацію про використання дискового простору можна за допомогою команди df -h.
Переглянути інформацію про розмір області зайнятої каталогом можна за допомогою команди du (du -s).
Порядок виконання роботи
1. Перегляньте список процесів користувача (Вас).
2. Перегляньте повний список процесів, запущених у системі. При цьому гарантуйте збереження інформації від "утікання" з екрана (якщо процесів багато). Зверніть увагу на ієрархію процесів. Простежте через поля PID і PPID всю ієрархію процесів тільки-но запущеної Вами команди, починаючи з початкового процесу init. Зверніть увагу на формування інших полів виводу.
3.Перегляньте дерево процесів.
4.Перегляньте список процесів з динамічним оновленням.
5. Запустіть кілька програм з панелі швидкого запуску. Наприклад: текстовий редактор, табличний редактор, калькулятор, інтернет-оболонку, панель налаштування, тощо.
6.Перегляньте повний список процесів, запущених вами, при цьому зверніть увагу на ієрархію процесів і на їхній зв'язок з терміналом.
7.Використовуючи команду kill , завершіть роботу кількох процесів. Перегляньте повний список процесів. Проаналізуйте інформацію.
8.Перегляньте список відкритих файлів. Проаналізуйте інформацію.
9.Перегляньте інформацію про оперативну пам’ять. Проаналізуйте інформацію.
10.Перегляньте інформацію про використання дискового простору. Проаналізуйте інформацію.
11.Перегляньте інформацію про розмір області зайнятої каталогом. Проаналізуйте інформацію.
12. Перегляньте список завдань у системі і проаналізуйте їхній стан.
13.Запустіть команди: ls -1|more i ls -1|less.
14. Перегляньте список завдань у системі і проаналізуйте їхній стан.
15. Запустіть завдання 1 у фоновому режимі.
16. Запустіть завдання 2 у пріоритетному режимі.
17.Використовуючи команду kill , завершіть роботу оболонки bash.
Контрольні запитання
Обгрунтуйте поняття процесу і його характеристики.
Охарактеризуйте вивід на екран списку процесів і його аналіз.
Що таке PID і PPID?
Охарактеризуйте поняття «сигнал».
Охарактеризуйте закриття процесів.
Охарактеризуйте фонові й активні процеси.
Охарактеризуйте команди Linux: ps, kill, fg, bg, jobs, lsof, free, df, du.
Обгрунтуйте використання параметру командного рядка " &".