Основы программирования в Linux - Мэтью Нейл
Тут можно читать бесплатно Основы программирования в Linux - Мэтью Нейл. Жанр: Интернет издательство , год .
Так же Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте knigi-for.me (knigi for me) или прочесть краткое содержание, предисловие (аннотацию),
описание и ознакомиться с отзывами (комментариями) о произведении.
Если вы хотите сохранить обработчик сигнала и продолжать реагировать на комбинацию клавиш <Ctrl>+<C>, вам придется восстановить его, вызвав функцию
signalПримечание
Мы не рекомендуем вам пользоваться функцией
signalsigactionФункция
signalSIG_ERRerrnoSIGKILLerrnoEINVALОтправка сигналов
Процесс может отправить сигнал другому процессу, включая себя самого, с помощью вызова функции
kill<b>#include <sys/types.h></b><b>#include <signal.h></b><b>int kill(pid_t pid, int sig);</b>Функция
killsigpidФункция
killerrnoerrnoEINVALEPERMESRCHСигналы предоставляют полезное средство, именуемое будильником или сигналом тревоги. Вызов функции
alarmSIGALRM<b>#include <unistd.h></b><b>unsigned int alarm(unsigned int seconds);</b>Вызов
alarmSIGALRMsecondsalarmalarmalarmДля того чтобы увидеть как работает функция
alarmforksleepsignalУпражнение 11.8 Будильник
В программе alarm.c первая функция,
ding#include <sys/types.h>#include <signal.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>static int alarm_fired = 0;void ding(int sig) { alarm_fired = 1;}В функции
mainSIGALRMint main() { pid_t pid; printf("alarm application starting\n"); pid = fork(); switch(pid) { case -1: /* Аварийное завершение */ perror("fork failed"); exit(1); case 0: /* Дочерний процесс */ sleep(5); kill(getppid(), SIGALRM); exit(0); }Родительский процесс устроен так, что перехватывает сигнал
SIGALRMsignal /* Если мы оказались здесь, то мы — родительский процесс */ printf("waiting for alarm to go off\n"); (void)signal(SIGALRM, ding); pause(); if (alarm_fired) printf("Ding!\n"); printf("done\n"); exit(0);}Когда вы выполните программу, то увидите, что она делает паузу на пять секунд, в течение которых ждет имитации будильника: