Читаем Linux API. Исчерпывающее руководство полностью

SIGPWR — 30 (SA=29, MP=19) — Подача питания скоро прекратится — Заверш.

SIGQUIT — 3 — Выход с терминала — + — Ядро

SIGSEGV — 11 — Неверная ссылка памяти — + — Ядро

SIGSTKFLT — 16 (SAM=н/опр, P=36) — Ошибка стека на сопроцессоре — Заверш.

SIGSTOP — 19 (SA=17, M=23, P=24) — Императивная остановка — + — Стоп

SIGSYS — 31 (SAMP=12) — Неверный системный вызов — + — Ядро

SIGTERM — 15 — Завершить процесс — + — Заверш.

SIGTRAP — 5 — Ловушка точки прерывания — + — Ядро

SIGTSTP — 20 (SA=18, M=24, P=25) — Остановка с терминала — + — Стоп

SIGTTIN — 21 (M=26, P=27) — Чтение с терминала ФП — + — Стоп

SIGTTOU — 22 (M=27, P=28) — Запись в терминал ФП — + — Стоп

SIGURG — 23 (SA=16, M=21, P=29) — Срочные данные на сокете — + — Игнор.

SIGUSR1 — 10 (SA=30, MP=16) — Пользовательский сигнал 1 — + — Заверш.

SIGUSR2 — 12 (SA=31, MP=17) — Пользовательский сигнал 2 — + — Заверш.

SIGVTALRM — 26 (M=28, P=20) — Закончилось время виртуального таймера — + — Заверш.

SIGWINCH — 28 (M=20, P=23) — Изменен размер окна терминала — Игнор.

SIGXCPU — 24 (M=30, P=33) — Превышено ограничение времени ЦПУ — + — Ядро

SIGXFSZ — 25 (M=31, P=34) — Превышено ограничение размера файла — + — Ядро


Обратите внимание на следующие замечания касаемо поведения по умолчанию некоторых сигналов из табл 20.1.

• В Linux 2.2 действие по умолчанию для сигналов SIGXCPU, SIGXFSZ, SIGSYS и SIGBUS — завершить процесс без создания файла дампа ядра. Начиная с версии ядра 2.4, Linux соответствует требованиям стандарта SUSv3, требующим, чтобы эти сигналы завершали процесс с генерацией дампа ядра. В некоторых других реализациях UNIX сигналы SIGXCPU и SIGXFSZ обрабатываются так же, как и в Linux 2.2.

• Сигнал SIGPWR в иных реализациях UNIX (где встречается) по умолчанию игнорируется.

• Сигнал SIGIO в некоторых реализациях UNIX (в частности, производных от BSD) по умолчанию игнорируется.

• Сигнал SIGEMT не утвержден стандартами, но встречается практически во всех реализациях UNIX. Однако в других реализациях он приводит к завершению с дампом ядра.

• В стандарте SUSv1 действие по умолчанию для сигнала SIGURG было указано как завершение процесса, оно является действием по умолчанию в некоторых старых реализациях UNIX. В стандарте SUSv2 была принята текущая спецификация (игнорирование).


20.3. Изменение диспозиций сигналов: signal()


В системах UNIX предоставляется два способа изменения диспозиции сигнала: signal() и sigaction(). Системный вызов signal(), описываемый в этом разделе, изначально был API для установки диспозиции сигнала, кроме того, данный вызов предлагает более простой интерфейс по сравнению с sigaction(). С другой стороны, sigaction() предоставляет функционал, недоступный в signal(). Существует несколько вариаций поведения функции signal() в различных реализациях UNIX (см. раздел 22.7), а это значит, что данная функция никогда не должна использоваться для установки обработчиков сигналов в переносимых программах. Из-за обозначенных проблем с переносимостью функция sigaction() является предпочтительным API для установки обработчиков сигналов. После того как мы объясним применение sigaction() в разделе 20.13, мы всегда будем задействовать данный вызов для установки обработчиков сигналов в примерах программ.

Несмотря на то что функция signal() задокументирована во втором разделе справочных страниц Linux, на самом деле эта функция реализована в glibc как библиотечная, реализованная поверх системного вызова sigaction().

#include


void (*signal(int sig, void (*handler)(int))) (int);

Возвращает предыдущую диспозицию сигнала при успешном завершении или SIG_ERR при ошибке

Прототип функции signal() требует небольших пояснений. Первый аргумент, sig, обозначает сигнал, диспозицию которого мы хотим изменить. Второй аргумент, handler, — это адрес функции, которую нужно вызывать по получении данного сигнала. Эта функция ничего не возвращает (void) и принимает один целочисленный аргумент. Таким образом, обработчик сигнала имеет следующую общую форму:

void

handler(int sig)

{

/* Код обработчика */

}

Мы описываем предназначение аргумента sig функции обработчика в разделе 20.4.

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

void (*oldHandler)(int);


oldHandler = signal(SIGINT, newHandler);

if (oldHandler == SIG_ERR)

errExit("signal");

/* Сделать здесь что-то еще. Если в это время получен SIGINT,

для обработки сигнала будет использован newHandler. */

if (signal(SIGINT, oldHandler) == SIG_ERR)

errExit("signal");

С помощью функции signal() невозможно получить текущую диспозицию сигнала без одновременного изменения ее значения. Чтобы сделать это, нам необходимо воспользоваться функцией sigaction().

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
C# 4.0: полное руководство
C# 4.0: полное руководство

В этом полном руководстве по C# 4.0 - языку программирования, разработанному специально для среды .NET, - детально рассмотрены все основные средства языка: типы данных, операторы, управляющие операторы, классы, интерфейсы, методы, делегаты, индексаторы, события, указатели, обобщения, коллекции, основные библиотеки классов, средства многопоточного программирования и директивы препроцессора. Подробно описаны новые возможности C#, в том числе PLINQ, библиотека TPL, динамический тип данных, а также именованные и необязательные аргументы. Это справочное пособие снабжено массой полезных советов авторитетного автора и сотнями примеров программ с комментариями, благодаря которым они становятся понятными любому читателю независимо от уровня его подготовки. Книга рассчитана на широкий круг читателей, интересующихся программированием на C#.Введите сюда краткую аннотацию

Герберт Шилдт

Программирование, программы, базы данных