Шрифт:
Имена сигналов задаются с помощью включенного заголовочного файла signal.h. Они начинаются с префикса
Таблица 11.3
| Имя сигнала | Описание |
|---|---|
| SIGABORT | *Процесс аварийно завершается |
| SIGALRM | Сигнал тревоги |
| SIGFPE | *Исключение операции с плавающей точкой |
| SIGHUP | Неожиданный останов или разъединение |
| SIGILL | *Некорректная команда |
| SIGINT | Прерывание терминала |
| SIGKILL | Уничтожение (не может быть перехвачен или игнорирован) |
| SIGPIPE | Запись в канал без считывателя |
| SIGQUIT | Завершение работы терминала |
| SIGSEGV | *Некорректный доступ к сегменту памяти |
| SIGTERM | Завершение, выход |
| SIGUSR1 | Сигнал 1, определенный пользователем |
| SIGUSR2 | Сигнал 2, определенный пользователем |
*Могут быть также предприняты действия, зависящие от конкретной реализации.
Если процесс получает один из этих сигналов без предварительной подготовки к его перехвату, процесс будет немедленно завершен. Обычно при этом создается файл с дампом ядра. Этот файл в текущем каталоге, названный core, представляет собой образ процесса, который может оказаться полезным при отладке.
К дополнительным относятся сигналы, приведенные в табл. 11.4.
Таблица 11.4
| Имя сигнала | Описание |
|---|---|
| SIGCHLD | Дочерний процесс остановлен или завершился |
| SIGCONT | Продолжить выполнение, если процесс был приостановлен |
| SIGSTOP | Остановить выполнение (не может захватываться или игнорироваться) |
| SIGTSTP | Сигнал останова, посылаемый с терминала |
| SIGTTIN | Фоновый процесс пытается читать |
| SIGTTOU | Фоновый процесс пытается писать |
Сигнал
Чуть позже мы рассмотрим более подробно первую группу сигналов. Пока же достаточно знать, что если командная оболочка и драйвер терминала нормально настроены, ввод символа прерывания (обычно от нажатия комбинации клавиш <Ctrl>+<C>) с клавиатуры приведет к отправке сигнала
Если вы хотите отправить сигнал не текущей приоритетной задаче, а другому процессу, используйте команду
Удобный вариант команды
Программы могут обрабатывать сигналы с помощью библиотечной функции
Это довольно сложное объявление говорит о том, что
Пример сделает все понятным. В упражнении 11.7 вы напишете программу ctrlc.c, которая реагирует на нажатие комбинации клавиш <Ctrl>+<C> вместо обычного завершения выводом соответствующего сообщения. Повторное нажатие <Ctrl>+<C> завершает программу.
Функция