Смекни!
smekni.com

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

РЕФЕРАТ

натему:

”Керування процесами і роботами в Linux”

Процеси і роботи в Linux

Зміст теми: Керування процесами і роботами в Linux: створення, зупинка, відновлення, завершення. Пріоритети процесів. Активні, фонові та відкладені процеси. Демони.

Теоретичні відомості

1. Основні поняття про процеси і роботи

Процесом у Linux і Unix називається програма або команда, що виконується.

Linux – багатозадачна ОС і в ній одночасно може виконуватись кілька процесів. Для того, щоб їх розрізняти, кожному з них присвоюється персональний ідентифікатор (PID – Process IDentificator). Для виведення на екран списку всіх процесів, що існують в даний момент в системі, використовується команда ps. В результаті виконання цієї команди на екран дисплея може бути, наприклад, видана така інформація:

PID TTY TIME CMD

701 pts/0 1: 16: 00 bash

2403 pts/0 0: 18: 00 bs

TTY – термінал з якого був запущений процес.

ТІМЕ – час, протягом якого він виконується.

CMD – назва програми, яка буде працювати у запущеному процесі.

Найперший процес, запущений системою, називається – init. Його PID=1. Він є головним батьківським процесом всіх інших процесів. Кожен новий процес повинний обов'язково мати свій батьківський процес. Наприклад, процес текстової оболонки bash, який був породжений безпосередньо від процесу init, у свою чергу, буде батьківським процесом для всіх інших процесів, створюваних користувачем під час сеансу. Особливістю Unix та Linux є те, що для кожного нового процесу створюється дублікат батьківського процесу. Такий механізм процесів називається клонуванням.

Кожний новостворений процес отримує три уже відкритих файли:

- stdin – для вхідних даних,

- stdout – для вихідних даних,

- stderr – для повідомлень про помилки.

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

Окрім поняття “процес” використовується також і поняття “робота”. Хоча їх практичний смисл досить близький, проте є деякі відмінності. По-перше, якщо процес характеризується ідентифікатором PID, то робота – номером, що позначається символом %. По-друге, для керування роботами існують спеціальні команди, про які детальніше буде сказано далі. По-третє, до робіт відноситься лише частина наявних в системі процесів, зокрема процеси користувачів.

Варто також зазначити, керування роботами здійснюється власними засобами текстових оболонок Linux. Наприклад, оболонка bash має команду jobs для керування роботами. Для перегляду наявних в системі робіт вказана команда має такий формат:

jobs –<опції>,

де <опції> вказують на ідентифікатори типу процесів (робіт).

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

jobs –l

2. Активні, фонові та відкладені процеси (роботи)

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

фоновий процес не допускає введення з клавіатури;

будь-яке виведення від фонового процесу на екран руйнує все, що ви в цей момент ввели з клавіатури;

при запуску великої кількості фонових процесів можна перевантажити систему.

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

Майте на увазі, що призупинення процесу - це не переривання процесу. Коли ви перериваєте процес, який виконується, натискаючи клавіші переривання (зазвичай, це <CTRL><C>), то процес знищується назавжди. А якщо процес знищено, то немає іншого способу відновити його, як знову запустити спочатку, використовуючи колишню команду. Зауважимо також, що деякі програми можуть перехоплювати переривання, тоді натискання клавіш <CTRL><C> не приведе до негайного припинення процесу. Це дозволить програмі виконати необхідні операції акуратного завершення. Деякі програми взагалі не дозволять вам їх перервати.

3. Створення процесу

Процес породжується за допомогою системного виклику fork(). При цьому виклику відбувається перевірка на наявність вільної пам'яті, доступної для розміщення нового процесу. Якщо необхідна пам'ять доступна, то створюється процес-нащадок поточного процесу, що представляє собою точну копію процесу, що викликається При цьому в таблиці процесів для нового процесу будується відповідна структура. Нова структура створюється також у таблиці користувача. При цьому всі змінні ініціалізуються нулями. Цьому процесу присвоюється новий унікальний ідентифікатор, а ідентифікатор батьківського процесу запам'ятовується в блоці керування процесом.

Процеси, що виконують різні програми, утворюються завдяки застосуванню наявних у стандартній бібліотеці Linux функцій “сімейства ехес”: ехесl, ехесlр, ехесlе, ехесv, ехесvе, ехесvр. Ці функції відрізняються форматом виклику, але в остаточному підсумку виконують одну задачу: заміщають всередині поточного процесу код, що виконується, на код, що міститься в зазначеному файлі. Цей файл може бути не тільки двійковим файлом Linux, що виконується (аналог файла *. exe в системі Windows), але і сценарієм командного інтерпретатора, і двійковим файлом іншого формату (наприклад, класом java, що виконується файлом DOS).

Таким чином, якщо операція запуску програми у DOS і Windows виконується як єдине ціле, то у Linux (і в Unix взагалі) розділена на два етапи: спочатку здійснюється запуск, а потім визначається, яка програма буде працювати. Чи є в цьому сенс і чи не занадто великі додаткові витрати? Адже створення копії процесу передбачає копіювання дуже значного обсягу інформації.

Сенс у даному підході є суттєвий. Дуже часто програма повинна зробити деякі дії ще до того, як почнеться власне її виконання. Наприклад, створити непоіменований канал для спілкування з іншими процесами. Реалізується це дуже просто: спочатку “відмежовуються” процеси, потім виконується системний виклик рiре() для створення каналу - і тільки після цього запускається програма із функції еxес().

Стосовно додаткових витрат, то вони найчастіше виявляються надто малими: при створенні копії процесу його індивідуальні дані фізично нікуди не копіюються. Замість цього використовується техніка, відома за назвою сору-оn-write (копіювання при записі): сторінки даних обох процесів особливим чином позначаються, і тільки тоді, коли один процес намагається змінити вміст будь-якої своєї сторінки, він дублюється. Щоб створити новий активний процес рядовому користувачеві зовсім не обов’язково знати про всі ці системні виклики. Йому достатньо лише ініціювати виконання команди або програми, набравши в командному рядку відповідне ім’я файла, або натиснувши на відповідну піктограму на робочому столі. Приклад запуску годинника:

xclock

Для запуску процесу у фоновому режимі необхідно після імені команди чи імені файла ввести символ & і лише потім натиснути на клавішу <Enter>. Приклад запуску годинника в фоновому режимі:

xclock &

Щоб призупинити активний процес необхідно одночасно натиснути клавіші <Ctrl><Z>. Поки процес зупинено на нього не витрачається час процесора. Але ви завжди можете відновити процес, причому як на передньому плані, так і в фоні. Для поновлення процесу в активному режимі використовується команда fg (“foreground” - передній план), а в фоновому режимі – команда bg (“background” - задній план).

Ще одне зауваження. Команди fg і bg звичайно переводять на передній план чи у фоновий режим процеси, що були зупинені останніми (що визначається символом “+” після номера роботи при використанні команди jobs).

Якщо ви виконуєте багато процесів (робіт) одночасно, ви можете перевести на передній план чи, навпаки, у фоновий режим конкретну роботу із заданням її номера як аргумента команд fg або bg:

fg%2 (переведення на передній план роботи номер 2),

bg%3 (переведення у фон роботи номер 3).

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

%2

еквівалентно команді

fg%2

Тип процесу (роботи) можна легко визначити за допомогою команди jobs. Наприклад, якщо після виконання цієї команди ми отримали на екрані дисплея інформацію

[1] - Running xclock

[2] - Running xeyes &

[3] + Stopped xcalc

то це означає, що перший процес (робота) в даний момент є активним, другий процес (робота) – фоновим, а третій процес (робота) – відкладений.

Можна також отримати список процесів (робіт) лише одного типу, вказавши відповідну опцію в команді jobs:

jobs –r - видача лише активних процесів (робіт),

jobs –s - видача лише відкладених процесів (робіт).

Пам’ятайте, що керування роботами, це властивість оболонки операційної системи. Команди fg, bg і jobs - внутрішні команди оболонки bash. Якщо з якоїсь причини ви використовуєте текстову оболонку, що не підтримує керування роботами, там ви не знайдете цих команд. На додаток до цього, є деякі аспекти керування роботами, що розрізняються в оболонках bash і tcsh. Деякі оболонки не здатні керувати роботами, хоча більшість оболонок Linux мають таку можливість.