关于信号sigprocmask
来源:互联网 发布:手机卸载软件 编辑:程序博客网 时间:2024/05/18 00:30
sigemptyset(&new_mask);
sigaddset(&new_mask,SIGQUIT); //将信号SIGQUIT,添加到空信号集new_mask中
if(sigprocmask(SIG_BLOCK, &new_mask,&old_mask)) //把信号SIGQUIT给阻塞
{
printf("block signal SIGQUIT error\n");
}
sigemptyset(&zero_mask); //清空信号集zero_mask
while(quitflag == 0)
{
sigsuspend(&zero_mask); //将当前的信号掩码替换成空信号掩码zero_mask,等待SIGQUIT消息处理函数将quitflag置为1
}
if(sigprocmask(SIG_SETMASK,&old_mask,NULL)<0) //程序继续运行后恢复进程原来的信号掩码
{
printf("unblock signal error\n");
}
sigaddset(&new_mask,SIGQUIT); //将信号SIGQUIT,添加到空信号集new_mask中
if(sigprocmask(SIG_BLOCK, &new_mask,&old_mask)) //把信号SIGQUIT给阻塞
{
printf("block signal SIGQUIT error\n");
}
sigemptyset(&zero_mask); //清空信号集zero_mask
while(quitflag == 0)
{
sigsuspend(&zero_mask); //将当前的信号掩码替换成空信号掩码zero_mask,等待SIGQUIT消息处理函数将quitflag置为1
}
if(sigprocmask(SIG_SETMASK,&old_mask,NULL)<0) //程序继续运行后恢复进程原来的信号掩码
{
printf("unblock signal error\n");
}
是为了原子操作
如果之前没有调用sigprocmask()屏蔽SIGQUIT信号,那么SIGQUIT信号随时都能发生
假定恰恰在判断quitflag == 0之后,信号发生,调用信号处理程序,quitflag = 1
从信号处理程序返回后,开始调用sigsuspend()..
如果此后没有第二个SIGQUIT信号,那么程序将一直阻塞在sigsuspend(),虽然此时quitflag = 1
调用sigprocmask()屏蔽SIGQUIT信号之后,即使信号发生,也将延迟递交,直到sigsuspend()解除信号屏蔽。
如果之前没有调用sigprocmask()屏蔽SIGQUIT信号,那么SIGQUIT信号随时都能发生
假定恰恰在判断quitflag == 0之后,信号发生,调用信号处理程序,quitflag = 1
从信号处理程序返回后,开始调用sigsuspend()..
如果此后没有第二个SIGQUIT信号,那么程序将一直阻塞在sigsuspend(),虽然此时quitflag = 1
调用sigprocmask()屏蔽SIGQUIT信号之后,即使信号发生,也将延迟递交,直到sigsuspend()解除信号屏蔽。
- 关于信号sigprocmask
- linux信号(sigprocmask,sigpending)
- sigprocmask阻塞信号
- 信号signal()、alarm()、信号集函数、sigprocmask()
- 信号signal()、alarm()、信号集函数、sigprocmask()
- 信号:signal(), sigaction(), sigaddset(), sigemptyset(), sigismember(), sigprocmask()
- Linux 信号 sigprocmask和suspend函数
- 信号基本操作之sigprocmask阻塞进程
- sigprocmask
- sigprocmask
- sigprocmask
- sigprocmask
- sigprocmask()
- sigprocmask
- Linux c之 信号屏蔽字sigprocmask()
- APUE 程序清单10-11 信号设置和sigprocmask实例
- 等待单个进程信号的正确方法 sigprocmask
- Linux信号控制-sigprocmask,sigsuspend,sigpending,sigaction,sigqueue
- dx控件获取数据相关代码
- Linux之debugfs介绍
- WPF 悬浮键盘
- 自定义弹出框控件
- DOS format was specified but only a single line feed character was found, not 2
- 关于信号sigprocmask
- usb鼠标枚举过程深度解析(下)
- delphi的Format
- SD卡 家族的发展
- python modbus_tk库 学习记录
- 点对点碰撞检测
- 为什么编程语言以及数据库要从1970年1月1日开始计算时
- PF_PACKET和AF_PACKET的不同
- ORACLE RAC中grid和oracle中环境变量设置和相关命令使用原则