10.4.3. Игнорирование сигналов

10.4.3. Игнорирование сигналов

Более практично, когда вызывается обработчик сигнала, это означает, что программа должна завершиться и выйти. Было бы раздражающим, если бы большинство программ по получении SIGINT выводили бы сообщение и продолжали работу; смысл сигнала в том, что они должны остановиться!

Например, рассмотрите программу sort. sort, возможно, создала любое число временных файлов для использования на промежуточных этапах процесса сортировки. По получении SIGINT, sort должна удалить временные файлы и выйти. Вот упрощенная версия обработчика сигнала из GNU Coreutils sort.c:

/* Обработка прерываний и отсоединений. Упрощена для представления */

static void sighandler(int sig) {

 signal(sig, SIG_IGN); /* Отныне этот сигнал игнорировать */

 cleanup();            /* Очистка после себя */

 signal(sig, SIG_DFL); /* Восстановление действия по умолчанию */

 raise(sig);           /* Повторно отправить сигнал */

}

Установка действия SIG_IGN гарантирует, что все последующие появляющиеся сигналы SIGINT не повлияют на продолжающийся процесс очистки. Когда функция cleanup() завершит работу, восстановление действия SIG_DFL позволяет системе сделать снимок образа процесса, если это нужно возникшему сигналу. Вызов raise() восстанавливает сигнал. Затем восстановленный сигнал вызывает действие по умолчанию, которое, скорее всего, завершит программу. (Далее в этой главе мы полностью покажем обработчик сигнала sort.c.)

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

7.2.1 Обработка сигналов

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

7.2.1 Обработка сигналов Ядро обрабатывает сигналы в контексте того процесса, который получает их, поэтому чтобы обработать сигналы, нужно запустить процесс. Существует три способа обработки сигналов: процесс завершается по получении сигнала, не обращает внимание на


Игнорирование файла политики публикации

Из книги Язык программирования С# 2005 и платформа .NET 2.0. [3-е издание] автора Троелсен Эндрю

Игнорирование файла политики публикации Теперь предположим, что вы (как администратор системы) установили файл политики публикации (и новую, более позднюю версию компоновочного блока) на машине клиента. Как обычно и случается, девять из десяти соответствующих


Игнорирование проверки соответствия правилам ВР 1.1

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Игнорирование проверки соответствия правилам ВР 1.1 В .NET 2.0 Web-сервисы XML автоматически проверяются на соответствие спецификациям базового профиля WSI версии 1.1 (ВР 1.1). В большинстве случаев это хорошо, поскольку позволяет создавать программное обеспечение с самыми


12.1. Концепция сигналов

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

12.1. Концепция сигналов 12.1.1. Жизненный цикл сигнала Сигналы имеют четко определенный жизненный цикл: они создаются, сохраняются до тех пор, пока ядро не выполнит определенное действие на основе сигнала, а затем вызывают совершение этого действия. Создание сигнала


12.2.3. Перехват сигналов

Из книги Краткое введение в программирование на Bash автора Родригес Гарольд

12.2.3. Перехват сигналов Вместо использования функции signal() (чья семантика в процессе эволюции стала неправильной) POSIX-программы регистрируют обработчики сигналов с помощью sigaction().#include <signal.h>int sigaction(int signum, struct sigaction *act, struct sigaction *oact);Этот системный вызов устанавливает


12.2.6. Ожидание сигналов

Из книги Linux программирование в примерах автора Роббинс Арнольд

12.2.6. Ожидание сигналов Когда программа построена преимущественно вокруг сигналов, часто необходимо, чтобы она ожидала появления какого-то сигнала, прежде чем продолжать работу. Системный вызов pause() предоставляет простую возможность для этого.#include <unistd.h>int


12.3.1. Описание сигналов

Из книги Программирование для Linux. Профессиональный подход автора Митчелл Марк

12.3.1. Описание сигналов Иногда приложения нуждаются в описании сигнала для отображения пользователю или помещения в журнал. Существуют три способа сделать это (см. главу 9). К сожалению, ни один из них не стандартизован.Самый старый метод предусматривает применение sys_siglist


13.4.2. Игнорирование указателя файла

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

13.4.2. Игнорирование указателя файла Программы, использующие бинарные файлы, часто выглядят, как показано ниже.lseek(fd, SEEK_SET, offset1);read(fd, buffer, bufferSize);offset2 = someOperation(buffer);lseek(fd, SEEK_SET, offset2);read(fd, buffer2, bufferSize2);offset3 = someOperation(buffer2);lseek(fd, SEEK_SET, offset3);read(fd, buffer3, bufferSize3);Необходимость поиска нового


23.3.4. Обработка сигналов

Из книги автора

23.3.4. Обработка сигналов Перед тем, как перейти к следующему пункту, нужно еще раз рассмотреть функцию gtk_signal_connect(). Данной функции нужно передать четыре параметра:? GtkObject *object — объект, которому может быть послан сигнал;? const gchar *name — имя сигнала, например, «destroy»;? GtkSignalFunc func


Перехват сигналов

Из книги автора

Перехват сигналов Вы можете использовать встроенную в bash программу trap для перехвата сигналов в своих программах. Это хороший способ изящно завершать работу программы. Например, если пользователь, когда ваша программа работает, нажмет CTRL-C — программе будет отправлен


10.2. Действия сигналов

Из книги автора

10.2. Действия сигналов Каждый сигнал (вскоре мы представим полный список) имеет связанное с ним действие по умолчанию. POSIX обозначает это как диспозицию (disposition) сигнала. Это то действие, которое ядро осуществляет для процесса, когда поступает определенный сигнал. Действие


10.4.3. Игнорирование сигналов

Из книги автора

10.4.3. Игнорирование сигналов Более практично, когда вызывается обработчик сигнала, это означает, что программа должна завершиться и выйти. Было бы раздражающим, если бы большинство программ по получении SIGINT выводили бы сообщение и продолжали работу; смысл сигнала в том,


10.8.3.1. Плохие родители: полное игнорирование потомков

Из книги автора

10.8.3.1. Плохие родители: полное игнорирование потомков Простейшим действием, которое вы можете сделать, является изменение действия для SIGCHLD на SIG_IGN. В этом случае завершившиеся потомки не становятся зомби. Вместо этого статус их завершения отбрасывается, и они полностью


4.5.1. Обработка сигналов

Из книги автора

4.5.1. Обработка сигналов Предположим, что многопотоковая программа принимает сигнал. В каком потоке будет вызван обработчик сигнала? Это зависит от версии UNIX. В Linux поведение программы объясняется тем. что потоки на самом деле реализуются в виде процессов.Каждый поток в Linux


8.1.8. Игнорирование регистра символов

Из книги автора

8.1.8. Игнорирование регистра символов По умолчанию команда grep чувствительна к изменению регистра символов. Чтобы провести поиск без учета регистра, воспользуйтесь опцией -i. В файле data.f обозначение месяца Sept встречается как в верхнем, так и в нижнем регистре. Поэтому для


18.7.8. Игнорирование символа #

Из книги автора

18.7.8. Игнорирование символа # При просмотре текстовых файлов возникает необходимость игнорировать или пропускать строки комментария. Ниже приводится типичный пример.Предположим, что с помощью обычного цикла while просматривается файл конфигурации. Обычно выполняется