Сигнал (операційні системи)

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

Сигнал це засіб міжпроцесної взаємодії в Unix-подібних, та інших операційних системах що сумісні зі стандартом POSIX. Сигнал являє собою асинхронне повідомлення що посилається процесу щоб проінформувати його про подію яка відбулась. Коли процес отримує сигнал, операційна система перериває хід його виконання, і запускає підпрограму обробки цього сигналу. Якщо в програмі явно не задана реакція на сигнал, запускається його стандартний обробник.

Відправлення сигналів[ред.ред. код]

  • Натискання певної комбінації клавіш в терміналі в якому запущений процес, змушує систему відправляти певні сигнали:
    • Ctrl-C (в старих Юніксах, DEL) посилає сигнал INT (SIGINT), за замовчуванням це змушує процес завершитись.
    • Ctrl-Z посилає сигнал TSTP (SIGTSTP); за замовчуванням це змушує процес призупинити виконання.
    • Ctrl-\ посилає сигнал QUIT (SIGQUIT); за замовчуванням, це змушує процес завершити роботу, та зберегти дамп.
    • (Стандартні комбінації клавіш можна змінити командою stty.)
  • Виклик системної функції kill(2) пошле заданий сигнал процесу, якщо дозволять права. Аналогічно команда шелла kill дозволить користувачу послати сигнал процесу. Спеціальна бібліотечна функція raise(3) посилає обраний сигнал поточному процесу.
  • Винятки, такі як ділення на нуль, чи порушення сегментації теж генерують сигнали (тут SIGFPE та SIGSEGV відповідно, і обидва завершують роботу і зберігають дамп).
  • Ядро може згенерувати сигнал, щоб повідомити процес про якусь подію. Наприклад, SIGPIPE генерується коли процес пише в трубу, що закрита читачем, за замовчуванням це змушує процес завершити роботу, що зручно при створенні конвеєрів.

Обробка сигналів[ред.ред. код]

Обробники сигналів можуть призначатись функцією signal(). Якщо для певного сигналу не встановлений обробник, то використовується стандартний. В іншому випадку сигнал перехоплюється і викликається його обробник. Процес також може задавати два способи поведінки, без створення обробника: ігнорувати сигнал (SIG_IGN) та використати стандартний обробник (SIG_DFL). Є два сигнали які не можуть бути перехопленими та обробленими: SIGKILL та SIGSTOP.


Дивіться також[ред.ред. код]

Посилання[ред.ред. код]