Sigaction функциясы: ОС сигналдарын басқару және қауіпсіздігі
Sigaction
Сигналдарды басқару үшін POSIX стандартындағы sigaction API туралы ақпарат. Программалар ОС сигналдарын қалай өңдейтінін анықтауға көмектеседі. Жүйелік қосылымдар.
Ағылшыншамен салыстырыңыз: абзацты басыңыз — түпнұсқа терезеде ашылады. Абзац астындағы EN түймесі оны мәтін ішінде көрсетеді.
Мазмұны
Кіріспе
Компьютерлік есептеуде sigaction – POSIX стандартымен анықталған функциялық API, ол бағдарламашыға белгілі бір операциялық жүйе сигналдарын алған кезде бағдарламаның қалай әрекет етуін бақылауға мүмкіндік береді.
In computing, sigaction is a function API defined by POSIX to give the programmer access to what should be a program's behavior when receiving specific OS signals.
Жалпы
Unix-ке ұқсас операциялық жүйелерде процестер арасындағы байланыс құралдарының бірі – сигналдар арқылы болып табылады. Орындалу бірлігі (процесс немесе жіп) операциялық жүйеден сигнал алған кезде, деректер парағында және осы сигналдың жалпы қабылданылған мағынасында анықталғандай, оған қатысты белгілі бір әрекет жасауы керек (мысалы, деректерін сақтау, орындалуын тоқтату, бір нәрсені синхрондау). `sigaction` жүйелік шақыруы бағдарламаның жүйеге жатпайтын, резервтелмеген сигналды алған жағдайдағы мінез-құлқын анықтау үшін қолданылады. Бұл жүйелік шақырумен бірге сигналды өңдеу процедурасына функциялық нұсқаушысы бар құрылымды беру арқылы іске асырылады. Кейбір алдын ала анықталған сигналдар (мысалы, SIGKILL) жүйемен басқарылатын және осындай жүйелік шақырулармен өзгертілмейтін бекітілген мінез-құлыққа ие.
In Unix like operating systems, one means of inter process communication is through signals. When an executing unit (process or thread) receives a signal from the OS, it should react in some way defined by the datasheet and the conventional meaning of this signal (i. e. by dumping its data, stopping execution, synchronizing something ). The sigaction system call is used to declare the behavior of the program should it receive one particular non system reserved signal. This is done by giving along with the system call a structure containing, among others, a function pointer to the signal handling routine. Some predefined signals (such as SIGKILL) have locked behavior that is handled by the system and cannot be overridden by such system calls.
Сигналды ауыстыру
sigaction функциясы сенімсіз сигнал функциясының орнына сенімді сигналдар үшін интерфейс ұсынады. signal интерфейсі арқылы орнатылған сигналдарды өңдеушілер, өңдеуші орындалу алдында дереу алынып тасталады. Сондықтан, тұрақты өңдеушілерді өңдеушінің орындалуы кезінде signal шақыру арқылы қайта орнату қажет, егер өңдеуші орындалып жатқанда, бірақ қайта орнатылғанға дейін сол типтегі сигнал келсе, бұл сенімсіздікке алып келеді. sigaction интерфейсі арқылы орнатылған өңдеушілерді тұрақты түрде орнатуға болады және өңдеушінің орындалуы кезінде белгілі бір сигналдар жиынтығын тоқтатуға болады. Бұл сигналдар өңдеушінің қалыпты аяқталуынан кейін дереу тоқтатылады (бірақ C++ ерекшелігі сияқты ерекше жағдайларда емес).
The sigaction function provides an interface for reliable signals in replacement of the unreliable signal function. Signal handlers installed by the signal interface will be uninstalled immediately prior to execution of the handler. Permanent handlers must therefore be reinstalled by a call to signal during the handler's execution, causing unreliability in the event a signal of the same type is received during the handler's execution but before the reinstall. Handlers installed by the sigaction interface can be installed permanently and a custom set of signals can be blocked during the execution of the handler. These signals will be unblocked immediately following the normal termination of the handler (but not in the event of an abnormal termination such as a C++ exception throw.)
C++ бағдарламасында қолдану
C++ тілінде try {/* */} catch {/* */} бағдарламалау құрылымы (хост платформаларға байланысты) сигнал беруге негізделуі мүмкін. C++ ерекшеліктеріне аударылған сигналдарды ұстау үшін GCC және Intel C компиляторы сияқты кейбір платформаларда fnon call exceptions сияқты арнайы компилятор опциялары қажет болуы мүмкін.
In C++, the try {/* */} catch {/* */} programming structure may be (depending on host platforms) based on signalling. To catch signals translated into C++ exceptions, special compiler switches may be necessary on some platforms such as fnon call exceptions for GCC and the Intel C Compiler.