Кожна виконується в 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, призначена для відправлення того чи іншого сигналу безпідставного процесу. Її формат виклику:
kill [-s SIGNAL | -SIGNAL] PID
де SIGNAL - це посилається процесу сигнал, а PID - відповідний ідентифікатор процесу. Наприклад, для посилки сигналу KILL процесу 1 можна записати:
-bash: kill: (1) - Операції не дозволена
Дана команда, зрозуміло, закінчилася з помилкою - на відправлення сигналів також поширюються угоди про контроль доступу,
і звичайному користувачеві не дозволено відправляти будь-які сигнали (тим більше KILL) процесам, що виконуються з правами суперкористувача (як говорилося в попередній лабораторній роботі, процес з PID. рівним 1 - це init).