Читаем Разработка приложений в среде Linux. Второе издание полностью

Если вам нужно проверить SI_TKILL, используйте следующий сегмент кода для определения этого значения:

#ifndef SI_TKILL

#define SI_TKILL -6

#endif

SI_TKILL не специфицирован ни в каком стандарте (хотя допускается ими), поэтому его следует применять осторожно в переносимых программах.

SI_KERNEL

Сигнал сгенерирован ядром.

Когда SIGILL, SIGFPE, SIGSEGV, SIGBUS и SIGCHLD посылаются ядром, то si_code вместо si_kernel принимает значения, перечисленные в табл. 12.3[71].

Таблица 12.3. Значения si_code для специальных сигналов

Сигналsi_codeОписание
SIGILLILL_ILLOPCНеправильный код операции (opcode).
ILL_ILLOPCНеправильный операнд.
ILL_ILLOPCНеправильный режим адресации.
ILL_ILLOPCНеправильная ловушка (trap).
ILL_ILLOPCПривилегированный код операции.
ILL_ILLOPCПривилегированный регистр.
ILL_ILLOPCВнутренняя ошибка стека.
ILL_ILLOPCОшибка сопроцессора.
SIGFPEFPE_INTDIVДеление целого на ноль.
FPE_INTOVFПереполнение целого.
FPE_FLTDIVДеление числа с плавающей точкой на ноль.
FPE_FLTOVFПереполнение числа с плавающей точкой.
FPE_FLTUNDПотеря значимости числа с плавающей точкой.
FPE_FLTRESНеточный результат числа с плавающей точкой.
FPE_FLTINVНеверная операция с плавающей точкой.
FPE_FLTSUBЧисло с плавающей точкой вне диапазона.
SIGSEGVSEGV_MAPPERАдрес не отображается на объект.
SEGV_ACCERRНеверные права доступа для адреса.
SIGBUSBUS_ADRALNНеверное выравнивание адреса.
BUS_ADRERRНесуществующий физический адрес.
BUS_OBJERRСпецифичный для объекта сбой оборудования.
SIGCHLDCLD_EXITEDДочерний процесс завершен.
CLD_KILLEDДочерний процесс уничтожен.
CLD_DUMPEDДочерний процесс уничтожен с выводом дампа памяти в файл.
CLD_TRAPPEDДочерний процесс достиг точки останова.
CLD_STOPPEDДочерний процесс приостановлен.

Чтобы помочь прояснить разные значения, которые может принимать si_code, рассмотрим пример, в котором SIGCHLD генерируется четырьмя разными способами: kill(), sigqueue(), raise() (использует системный вызов tkill()) и созданием дочернего процесса, который немедленно прерывается.

 1: /* sicode.с */

 2:

 3: #include

 4: #include

 5: #include

 6: #include

 7:

 8: #ifndef SI_TKILL

 9: #define SI_TKILL -6

10: #endif

11:

12: void handler(int signo, siginfo_t *info, void *f ) {

13:  static int count = 0;

14:

15:  printf("перехвачен сигнал, отправленный ");

16:  switch(info->si_code) {

17:  case SI_USER:

18:   printf("kill()\n"); break;

19:  case SI_QUEUE:

20:   printf("sigqueue()\n"); break;

21:  case SI_TKILL:

22:   printf("tkill() или raise()\n"); break;

23:  case CLD_EXITED:

24:   printf ("ядро сообщает, что дочерний процесс завершен\n"); exit(0);

25:  }

26:

27:  if (++count == 4) exit(1);

28: }

29:

30: int main() {

31:  struct sigaction act;

32:  union sigval val;

33:  pid_t pid = getpid();

34:

35:  val.sival_int = 1234;

36:

37:  act.sa_sigaction = handler;

38:  sigemptyset(&act.sa_mask);

39:  act.sa_flags = SA_SIGINFO;

40:  sigaction(SIGCHLD, &act, NULL);

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

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

1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT
Adobe InDesign CS3
Adobe InDesign CS3

Книга посвящена верстке и макетированию в программе Adobe InDesign CS3. Помимо того что в ней описываются возможности программы, рассматриваются также принципы и традиции верстки, приводятся примеры решения типичных задач. Все это позволит читателю не только овладеть богатым инструментарием программы, но и грамотно применять его.Материал книги разделен на логические части: теоретические сведения, инструментарий программы, решение задач, – а также рассчитан на два уровня подготовки читателей – начинающих и опытных пользователей, что выгодно отличает книгу от других изданий. Это позволит применять ее как новичкам для знакомства с программой, так и пользователям со стажем для пополнения своих знаний.

Владимир Гавриилович Завгородний , Владимир Завгородний

Программирование, программы, базы данных / Программное обеспечение / Книги по IT