Кіріспе

Компьютерлік есептеуде sigaction – POSIX стандартымен анықталған функциялық API, ол бағдарламашыға белгілі бір операциялық жүйе сигналдарын алған кезде бағдарламаның қалай әрекет етуін бақылауға мүмкіндік береді.

Жалпы

Unix-ке ұқсас операциялық жүйелерде процестер арасындағы байланыс құралдарының бірі – сигналдар арқылы болып табылады. Орындалу бірлігі (процесс немесе жіп) операциялық жүйеден сигнал алған кезде, деректер парағында және осы сигналдың жалпы қабылданылған мағынасында анықталғандай, оған қатысты белгілі бір әрекет жасауы керек (мысалы, деректерін сақтау, орындалуын тоқтату, бір нәрсені синхрондау). `sigaction` жүйелік шақыруы бағдарламаның жүйеге жатпайтын, резервтелмеген сигналды алған жағдайдағы мінез-құлқын анықтау үшін қолданылады. Бұл жүйелік шақырумен бірге сигналды өңдеу процедурасына функциялық нұсқаушысы бар құрылымды беру арқылы іске асырылады. Кейбір алдын ала анықталған сигналдар (мысалы, SIGKILL) жүйемен басқарылатын және осындай жүйелік шақырулармен өзгертілмейтін бекітілген мінез-құлыққа ие.

Сигналды ауыстыру

sigaction функциясы сенімсіз сигнал функциясының орнына сенімді сигналдар үшін интерфейс ұсынады. signal интерфейсі арқылы орнатылған сигналдарды өңдеушілер, өңдеуші орындалу алдында дереу алынып тасталады. Сондықтан, тұрақты өңдеушілерді өңдеушінің орындалуы кезінде signal шақыру арқылы қайта орнату қажет, егер өңдеуші орындалып жатқанда, бірақ қайта орнатылғанға дейін сол типтегі сигнал келсе, бұл сенімсіздікке алып келеді. sigaction интерфейсі арқылы орнатылған өңдеушілерді тұрақты түрде орнатуға болады және өңдеушінің орындалуы кезінде белгілі бір сигналдар жиынтығын тоқтатуға болады. Бұл сигналдар өңдеушінің қалыпты аяқталуынан кейін дереу тоқтатылады (бірақ C++ ерекшелігі сияқты ерекше жағдайларда емес).

C++ бағдарламасында қолдану

C++ тілінде try {/* */} catch {/* */} бағдарламалау құрылымы (хост платформаларға байланысты) сигнал беруге негізделуі мүмкін. C++ ерекшеліктеріне аударылған сигналдарды ұстау үшін GCC және Intel C компиляторы сияқты кейбір платформаларда fnon call exceptions сияқты арнайы компилятор опциялары қажет болуы мүмкін.