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()) ΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ΠΌ Π΄ΠΎΡΠ΅ΡΠ½Π΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΡΡΡ.