Міжпроцесна взаємодія на базі передачі повідомлень

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

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

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

Обробник сигналу в процесі має вид функції такого вигляду|виду|:

void имя_функции(int sigtype);

Параметром даної функції є|з'являється,являється| тип сигналу (один і той же обробник може бути встановлений|установлений| для обробки сигналів різних типів).

Для установки свого обробника сигналу, для його відміни або для установки ігнорування сигналу використовується системний виклик signal

Функції-обробники сигналів – це звичайні|звичні| функції Сі, вони мають доступ до всіх глобально видимим змінним і функціям.

Основні типи сигналів:

SIGALARM(14) – Якщо процес не зареєстрував обробник цього сигналу, то обробник за умовчанням завершує процес. Даний сигнал буде доставлений процесу через вказаний в дужках проміжок часу, це здійснюється за допомогою системного виклику abort.

SIGCHLD- Сигнал відправляється|вирушає| батьківському процесу у разі|в разі| завершення його дочірнього процесу. За умовчанням сигнал ігнорується.

SIGCONT- Сигнал продовження виконання програми після|потім| зупинки. Обробника за умовчанням немає.

SIGKILL (9) - Сигнал аварійного завершення процесу. По цьому сигналу процес завершується негайно — без звільнення|визволення| ресурсів. Цей сигнал не може бути перехоплений, заблокований або перевизначений самим процесом, завжди використовується стандартний обробник операційної| системи. Цей сигнал використовується для гарантованого завершення процесу.

SIGSTOP- Сигнал припинення роботи процесу. Цей сигнал не може бути перехоплений, заблокований або перевизначений. Використовується для гарантованого припинення роботи процесу з|із| повним|цілковитим| збереженням|зберіганням| його стану і можливістю|спроможністю| відновлення|поновлення|.

SIGTERM (15) - Сигнал завершення процесу, як правило використовується для коректного завершення його роботи.

Рис. 9.1. Приклад|зразок| використання сигналу SIGTERM

SIGUSR1, SIGUSR2 - «Призначені» для користувача сигнали — можуть використовуватися процесами для всіляких повідомлень. Обробник за умовчанням завершує процес.

Рис. 9.2. Використання сигналів при міжпроцесовому| обміні

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