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; (编辑:威海站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|