Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π² срСдС Linux. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 53

Автор Майкл ДТонсон

49:  raise(SIGRTMIN+1);

50:  raise(SIGRTMIN);

51:  raise(SIGRTMIN);

52:  raise(SIGRTMIN+1);

53:  raise(SIGRTMIN);

54:  raise(SIGUSR1);

55:  raise(SIGUSR1);

56:

57:  /* Π Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ доставку этих сигналов. ВсС ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ доставлСны

58:     прямо ΠΏΠ΅Ρ€Π΅Π΄ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΎΠΌ этого Π²Ρ‹Π·ΠΎΠ²Π° (для Linux; это

59:     ΠΠ•ΠŸΠ•Π Π•ΠΠžΠ‘Π˜ΠœΠžΠ• ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅). */

60:  sigprocmask(SIG_SETMASK, &oldMask, NULL);

61:

62:  /* ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ упорядочСнный список ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‡Π΅Π½Π½Ρ‹Ρ… сигналов */

63:  printf("ΠŸΡ€ΠΈΠ½ΡΡ‚Ρ‹Π΅ сигналы:\n");

64:  for (i = 0; i < nextSig; i++)

65:   if (sigOrder[i] < SIGRTMIN)

66:    printf("\t%s\n", strsignal(sigOrder[i]));

67:   else

68:    printf("\tSIGRTMIN + %d\n", sigOrder[i] - SIGRTMIN);

69:

70:  return 0;

71: }

Π­Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° посылаСт сСбС Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ количСство сигналов ΠΈ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° дисплСй порядок ΠΈΡ… получСния. Когда сигналы ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‚ΡΡ, ΠΎΠ½Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ ΠΈΡ…, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡƒΡŽ доставку. Π’Π°ΠΊΠΆΠ΅ ΠΎΠ½Π° Π±Π»ΠΎΠΊΠΈΡ€ΡƒΠ΅Ρ‚ сигналы всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° вызываСтся ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ, устанавливая Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ‡Π»Π΅Π½Π° sa_mask структуры struct sigaction ΠΏΡ€ΠΈ настройкС ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ сигнала. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ΅ состояниС состязаний ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌ nextSig ΠΈ sigOrder ΠΈΠ·Π½ΡƒΡ‚Ρ€ΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

Запуск этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ выдаст ΠΏΠΎΠΊΠ°Π·Π°Π½Π½Ρ‹Π΅ Π½ΠΈΠΆΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹.

ΠŸΡ€ΠΈΠ½ΡΡ‚Ρ‹Π΅ сигналы:

        User defined signal1

        SIGRTMIN + 0

        SIGRTMIN + 0

        SIGRTMIN + 0

        SIGRTMIN + 1

        SIGRTMIN + 1

Π­Ρ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС сигналы Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π±Ρ‹Π»ΠΈ доставлСны, Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя, Π±Ρ‹Π» доставлСн Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ экзСмпляр сигнала SIGUSR1. Π’Ρ‹ Ρ‚Π°ΠΊΠΆΠ΅ Π²ΠΈΠ΄ΠΈΡ‚Π΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ порядка сигналов Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ β€” всС сигналы SIGRTMIN Π±Ρ‹Π»ΠΈ доставлСны ΠΏΠ΅Ρ€Π΅Π΄ SIGRTMIN + 1.

12.7. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ свСдСния ΠΎ сигналах

Π‘ΠΈΠ³Π½Π°Π»Ρ‹, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΡ‹ обсуТдали Π΄ΠΎ сих ΠΏΠΎΡ€, Π½Π΅ нСсли Π² сСбС Π½ΠΈΠΊΠ°ΠΊΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…; появлСниС сигнала β€” это СдинствСнная информация, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. Π’ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… случаях Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ Π·Π½Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ послуТило ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сигнала (ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ адрСсация памяти, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰Π°Ρ SIGSEGV), ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅Ρ‚ΡŒ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² сигналы, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ€Π΅Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Real Time Signals позволяСт Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ΠΎΠ±Π΅ эти Π·Π°Π΄Π°Ρ‡ΠΈ.

12.7.1. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ контСкста сигнала

Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ ΠΎ Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹Π» сгСнСрирован сигнал, называСтся контСкстом[68] сигнала. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ этот контСкст, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ сигналов, ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Ρ…. Они Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚ Π΄Π²Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° siginfo_t, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ контСкст сигнала, ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ Π½Π° void*, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использован Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌΠΈ систСмными Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°ΠΌΠΈ[69]. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ выглядит ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ Ρ‚Π°ΠΊΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°.

void handler(int signum, siginfo_t *siginfo, void *context);

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ядру Π½Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠΎΠ»Π½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ контСкстС, устанавливая Ρ„Π»Π°Π³ SA_SIGINFO Ρ‡Π»Π΅Π½Π° sa_mask структуры struct sigaction, примСняСмой для рСгистрации ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ° сигнала. Π§Π»Π΅Π½ sa_handler Ρ‚Π°ΠΊΠΆΠ΅ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ ΠΎΠ½ являСтся ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ с Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ. ВмСсто этого Π½ΠΎΠ²Ρ‹ΠΉ Ρ‡Π»Π΅Π½, sa_sigaction, ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π½Π° ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊ сигнала с ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΌ ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏΠΎΠΌ. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ½ΠΈΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»Π΅Π½ΠΈΠ΅ памяти, sa_handler ΠΈ sa_sigaction Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈ Ρ‚ΠΎΡ‚ ΠΆΠ΅ участок памяти, поэтому Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π΄Π²ΡƒΡ… Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ Π² ΠΎΠ΄Π½ΠΎ ΠΈ Ρ‚ΠΎ ΠΆΠ΅ врСмя. Π§Ρ‚ΠΎΠ±Ρ‹ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ это ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½Ρ‹ΠΌ, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π‘ опрСдСляСт struct sigaction ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ.

#include <signal.h>


struct sigaction {

 union {

  __sighandler_t sa_handler;

  __sigaction_t sa_sigaction;

 } __sigaction_handler;

 sigset_t sa_mask;

 unsigned long sa_flags;

};

#define sa_handler __sigaction_handler.sa_handler

#define sa_sigaction __sigaction_handler.sa_sigaction

ИспользованиС прСдставлСнной ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ объСдинСний ΠΈ макросов позволяСт этим Π΄Π²ΡƒΠΌ Ρ‡Π»Π΅Π½Π°ΠΌ Ρ€Π°Π·Π΄Π΅Π»ΡΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈ Ρ‚Ρƒ ΠΆΠ΅ ΠΏΠ°ΠΌΡΡ‚ΡŒ Π±Π΅Π· нСобходимости услоТнСния с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° siginfo_t содСрТит ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ ΠΎ Ρ‚ΠΎΠΌ, Π³Π΄Π΅ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π±Ρ‹Π» сгСнСрирован сигнал. ВсСм сигналам доступны Π΄Π²Π° Ρ‡Π»Π΅Π½Π°: sa_signo ΠΈ si_code. КакиС Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‡Π»Π΅Π½Ρ‹ доступны β€” зависит ΠΎΡ‚ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ сигнала, ΠΈ эти Ρ‡Π»Π΅Π½Ρ‹ Ρ€Π°Π·Π΄Π΅Π»ΡΡŽΡ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Ρ‚ΠΎΠΌΡƒ, ΠΊΠ°ΠΊ это Π΄Π΅Π»Π°ΡŽΡ‚ Ρ‡Π»Π΅Π½Ρ‹ sa_handler ΠΈ sa_sigaction структуры struct sigaction. Π§Π»Π΅Π½ sa_signo содСрТит Π½ΠΎΠΌΠ΅Ρ€ доставлСнного сигнала ΠΈ всСгда Ρ€Π°Π²Π΅Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΡƒ сигнала, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ si_code ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ сигнал Π±Ρ‹Π» сгСнСрирован, ΠΈ измСняСтся Π² зависимости ΠΎΡ‚ Π½ΠΎΠΌΠ΅Ρ€Π° сигнала. Для Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° сигналов ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ пСрСчислСнныС Π½ΠΈΠΆΠ΅ значСния.[70]

SI_USER

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ‹Π·Π²Π°Π»ΠΎ kill() для ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ сигнала. ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅. Ѐункция sigsend(), Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Π°Ρ Π² Linux для совмСстимости с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ систСмами Unix, Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Π΄Π°Π΅Ρ‚ SI_USER.

SI_QUEUE

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ‹Π·Π²Π°Π»ΠΎ sigqueue() для ΠΎΡ‚ ΠΏΡ€Π°Π²ΠΊΠΈ сигнала, Ρ‡Ρ‚ΠΎ обсуТдаСтся Π² самом ΠΊΠΎΠ½Ρ†Π΅ этой Π³Π»Π°Π²Ρ‹.

SI_TKILL

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ пространства ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π²Ρ‹Π·Π²Π°Π»ΠΎ tkill(). Π’ Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ ядро Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ SI_TKILL, Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ спСцифицировано Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ вСрсии Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π‘.

Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒ 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 ОписаниС SIGILL ILL_ILLOPC ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ (opcode). ILL_ILLOPC ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄. ILL_ILLOPC ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ адрСсации. ILL_ILLOPC ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Π°Ρ Π»ΠΎΠ²ΡƒΡˆΠΊΠ° (trap). ILL_ILLOPC ΠŸΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ. ILL_ILLOPC ΠŸΡ€ΠΈΠ²ΠΈΠ»Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ рСгистр. ILL_ILLOPC ВнутрСнняя ошибка стСка. ILL_ILLOPC Ошибка сопроцСссора. SIGFPE FPE_INTDIV Π”Π΅Π»Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ Π½Π° ноль. FPE_INTOVF ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ†Π΅Π»ΠΎΠ³ΠΎ. FPE_FLTDIV Π”Π΅Π»Π΅Π½ΠΈΠ΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π½Π° ноль. FPE_FLTOVF ΠŸΠ΅Ρ€Π΅ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. FPE_FLTUND ΠŸΠΎΡ‚Π΅Ρ€Ρ значимости числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. FPE_FLTRES НСточный Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ числа с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. FPE_FLTINV НСвСрная опСрация с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ. FPE_FLTSUB Число с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. SIGSEGV SEGV_MAPPER АдрСс Π½Π΅ отобраТаСтся Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. SEGV_ACCERR НСвСрныС ΠΏΡ€Π°Π²Π° доступа для адрСса. SIGBUS BUS_ADRALN НСвСрноС Π²Ρ‹Ρ€Π°Π²Π½ΠΈΠ²Π°Π½ΠΈΠ΅ адрСса. BUS_ADRERR ΠΠ΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ физичСский адрСс. BUS_OBJERR Π‘ΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ‡Π½Ρ‹ΠΉ для ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° сбой оборудования. SIGCHLD CLD_EXITED Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½. CLD_KILLED Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½. CLD_DUMPED Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс ΡƒΠ½ΠΈΡ‡Ρ‚ΠΎΠΆΠ΅Π½ с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π΄Π°ΠΌΠΏΠ° памяти Π² Ρ„Π°ΠΉΠ». CLD_TRAPPED Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс достиг Ρ‚ΠΎΡ‡ΠΊΠΈ останова. CLD_STOPPED Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс приостановлСн.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠΌΠΎΡ‡ΡŒ ΠΏΡ€ΠΎΡΡΠ½ΠΈΡ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ значСния, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚ΡŒ si_code, рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ SIGCHLD гСнСрируСтся Ρ‡Π΅Ρ‚Ρ‹Ρ€ΡŒΠΌΡ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ способами: kill(), sigqueue(), raise() (ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ систСмный Π²Ρ‹Π·ΠΎΠ² tkill()) ΠΈ созданиСм Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ прСрываСтся.