void
fatal_error_signal (int sig)
{
/ Since this handler is established for more than one kind of signal,it might still get invoked recursively by delivery of some other kind
of signal. Use a static variable to keep track of that. /
if (fatal_error_in_progress)
raise (sig);
fatal_error_in_progress = 1;
/* Now do the clean up actions:
- reset terminal modes
- kill child processes
- remove lock files */
...
/ Now reraise the signal. Since the signal is blocked,it will receive its default handling,which is
to terminate the process. We could just call
exit or abort ,but reraising the signal
sets the return status from the process correctly. /
raise (sig);
}
setjmpandlongjmp facilities (see section).
#include
#include
jmp_buf return_to_top_level;
volatile sig_atomic_t waiting_for_input; (编辑:ASP站长)
【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
|