当前位置: 技术问答>linux和unix
关于sigprocmask和sigsuspend的问题
来源: 互联网 发布时间:2016-09-26
本文导语: 在APUE的第十章中,有下面一段代码,有个地方不太理解: sigemptyset(&new_mask); sigaddset(&new_mask,SIGQUIT); //将信号SIGQUIT,添加到空信号集new_mask中 if(sigprocmask(SIG_BLOCK, &new_mask,&old_mask)) //把信号SIGQUIT...
在APUE的第十章中,有下面一段代码,有个地方不太理解:
sigemptyset(&new_mask);
sigaddset(&new_mask,SIGQUIT); //将信号SIGQUIT,添加到空信号集new_mask中
if(sigprocmask(SIG_BLOCK, &new_mask,&old_mask)) //把信号SIGQUIT给阻塞
{
printf("block signal SIGQUIT errorn");
}
sigemptyset(&zero_mask); //清空信号集zero_mask
while(quitflag == 0)
{
sigsuspend(&zero_mask); //将当前的信号掩码替换成空信号掩码zero_mask,等待SIGQUIT消息处理函数将quitflag置为1
}
if(sigprocmask(SIG_SETMASK,&old_mask,NULL)
sigemptyset(&new_mask);
sigaddset(&new_mask,SIGQUIT); //将信号SIGQUIT,添加到空信号集new_mask中
if(sigprocmask(SIG_BLOCK, &new_mask,&old_mask)) //把信号SIGQUIT给阻塞
{
printf("block signal SIGQUIT errorn");
}
sigemptyset(&zero_mask); //清空信号集zero_mask
while(quitflag == 0)
{
sigsuspend(&zero_mask); //将当前的信号掩码替换成空信号掩码zero_mask,等待SIGQUIT消息处理函数将quitflag置为1
}
if(sigprocmask(SIG_SETMASK,&old_mask,NULL)