Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2.docx
Скачиваний:
11
Добавлен:
12.02.2016
Размер:
1.41 Mб
Скачать

Завершення процесу

Після створення процес починає працювати і виконує своє завдання. Але рано чи пізно нові процеси будуть завершені, зазвичай в силу таких обставин:

  1. звичайного виходу (добровільно) ;

  2. виходу при виникненні помилки (добровільно);

  3. виникнення фатальної помилки (примусово);

  4. знищення іншим процесом (примусово).

Більшість процесів завершуються після закінчення своєї роботи. Коли компілятор відкомпілює задану йому програму, він здійснює системний виклик, що повідомляє операційній системі про завершення своєї роботи. Цим викликом в UNIX є exit, а в Windows - ExitProcess. Програми, що працюють з екраном, також підтримують добровільне завершення. Текстові процесори, інтернет-браузери і аналогічні програми завжди містять значок або пункт меню, на якому користувач може клацнути, щоб наказати процесу видалити всі тимчасові файли, які ним були відкриті, і завершити свою роботу.

Друга причина завершення - виявлення процесом фатальної помилки. Наприклад, якщо користувач набере команду

сс foo.c

з метою компіляції програми foo.c, а файлу з такою назвою не буде, то відбудеться простий вихід з компілятора.

Третя причина завершення - помилка, викликана самим процесом, частіше всього пов'язана з помилкою в програмі. В якості прикладів можна навести невірну інструкцію, посилання на неіснуючу адресу пам'яті або ділення на нуль.

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

Ієрархія процесів

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

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

На відміну від цього в Windows не існує поняття ієрархії процесів, і всі процеси є рівнозначними. Єдиним натяком на ієрархію процесів можна вважати привласнення батьківському процесу, що створює новий процес, спеціального маркера (званого дескриптором), який може ним використовуватися для управління дочірнім процесом. Але він може вільно передавати цей маркер якому-небудь іншому процесу, порушуючи тим самим ієрархію. А в UNIX процеси не можуть позбавлятися зв'язку зі своїми дочірніми процесами.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]