Управління виконанням програм - студопедія

Кожна виконується в Linux програма називається процесом. Linux як багатозадачна система характеризується тим, що в ній одночасно може виконуватися безліч процесів, що належать одному або декільком користувачам. Вивести список виконуються в даний час процесів можна командою ps, наприклад, наступним чином:

PID TT STAT TIME COMMAND

24 3 S 0:03 (bash)

Працюючий процес також називають завданням (англ. Job). Поняття процес і завдання є взаємозамінними. Однак, зазвичай процес називають завданням, коли мають на увазі управління завданням (англ. Job control). Управління завданням - це функція командної оболонки, яка надає користувачеві можливість перемикатися між кількома завданнями.

У більшості випадків користувачі запускають тільки одне завдання - це буде та команда, яку вони ввели останньої в командній оболонці. Однак багато командні оболонки (включаючи bash і tcsh) мають функції управління завданнями. що дозволяють запускати одночасно кілька команд або завдань і, в міру потреби, перемикатися між ними.

Передній план і фоновий режим.

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

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

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

Два сигналу - номер 9 (KILL) і 19 (STOP) - завжди обробляє система. Перший з них примусово зупиняє і знищує процес (звідси і назва, англ. Kill - вбивати). Сигнал STOP призупиняє процес: в такому стані процес не видаляється з таблиці процесів, але і не виконується до тих пір, поки не отримає сигнал 18 (CONT), після чого продовжує роботу. У командній оболонці Linux сигнал STOP можна передати активного процесу за допомогою керуючої послідовності +.

Сигнал номер 15 (TERM) служить для переривання роботи завдання. При перериванні (англ. Interrupt) завдання процес завершує свою роботу. Переривання завдань зазвичай здійснюється керуючою послідовністю +. Відновити перерване завдання ніяким чином неможливо. На відміну від сигналу KILL, програми можуть перехопити сигнал TERM і встановити власний обробник цього сигналу, так що натискання комбінації клавіш + може не перервати процес негайно. Це зроблено для того, щоб програма могла коректно завершити свою роботу - видалити тимчасові файли, закінчити запис даних і т. П. Перш, ніж вона буде завершена. На практиці, деякі програми взагалі не можна перервати таким способом.

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

kill [-s SIGNAL | -SIGNAL] PID

де SIGNAL - це посилається процесу сигнал, а PID - відповідний ідентифікатор процесу. Наприклад, для посилки сигналу KILL процесу 1 можна записати:

-bash: kill: (1) - Операції не дозволена

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

Схожі статті