对于正在侦听信号的正在运行的进程的中断有疑问。下面是我的处理程序。 SIGHUP用于重新加载我的配置文件,SIGCHLD用于在它产生的进程上使用nohang进行waitpid,其他用于终止进程。
void sig_handler( int sig, siginfo_t *siginfo, void *ucontext )
{
if ( sig == SIGHUP ) {
reload = 1;
} else if( sig == SIGCHLD) {
// TODO
} else if ( sig == SIGTERM || sig == SIGKILL || sig == SIGINT ) {
done = 1;
}
}
do {
if(reload) {
// opening files, doing file descriptor stuff
... // processing...
**SIHUP OCCURS! WHAT HAPPENS?** <<<<<<<<<<< Line: 505 <<<<<<<<<<<<<<<<<<
... // processing...
}
} while(!done);
我目前对信号的理解:
我担心的是:
问题:
谢谢!
答案 0 :(得分:0)
实际上,如果发生信号,则在调用信号处理程序之前,您当前的操作不一定会完成。但是,完成信号处理程序后,您的代码将从信号中断时的确切位置恢复。并且由于你的所有信号处理程序都设置了一个标志变量,因此对当前正处于其他任何事情中间的代码没有任何影响。
<强>数目:强>