UNIX环境高级编程学习之第十章信号-信号集的操作,让进程阻塞SIGQUIT信号
2010-03-01 11:10
621 查看
UNIX环境高级编程学习之第十章信号-信号集的操作,让进程阻塞SIGQUIT信号
/* File: sigprocmask.c Desc: 信号集的操作,让进程阻塞SIGQUIT信号 */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> #include <signal.h> #include <sys/types.h> #include <unistd.h> // 出错处理函数 void err_sys(char * msg) { printf("Error: %s /n", msg); exit(-1); } //退出信号处理函数 static void sig_quit(int signo) { printf("Info: caught SIGQUIT (捕获SIGQUIT信号)/n"); if (signal(SIGQUIT, SIG_DFL) == SIG_ERR) { err_sys("can't reset SIGQUIT (恢复SIGQUIT系统默认处理出错)"); } } int main() { sigset_t newmask, oldmask, pendmask; if (signal(SIGQUIT, sig_quit) == SIG_ERR) { err_sys("can't catch SIGQUIT(不能捕捉SIGQUIT信号)"); } /* 阻塞SIGQUIT和保存当前信号屏蔽字 */ sigemptyset(&newmask); // 清空信号集 sigaddset(&newmask, SIGQUIT); // 添加一个信号 if ( sigprocmask(SIG_BLOCK, &newmask, &oldmask) < 0) // 设置阻塞信号集newmask, 保存阻塞这前信号集oldmask { err_sys("SIG_BLOCK error(设置阻塞信号集出错)"); } sleep(5); // 按Ctrl+/ if (sigpending(&pendmask) < 0) // 取出当前未决信号集 (当前阻塞信号) { err_sys("sigpending error"); } if (sigismember(&pendmask, SIGQUIT)) // 判断当前阻塞信号集中有没有SIGQUIT { printf("SIGQUIT pending (SIGQUIT 是没有处理) /n"); } if (sigprocmask(SIG_SETMASK, &oldmask, NULL) < 0) // 设置阻塞为原来的信号集 { err_sys("SIG_SETMASK error(设置阻塞信号集出错)"); } sleep(5);// 按Ctrl+/ return 0; }
相关文章推荐
- UNIX环境高级编程学习之第十章信号-用信号实现父子进程同步
- UNIX环境高级编程学习之第十章信号-信号的基本操作(绑定/忽略/默认/发送)
- UNIX环境高级编程学习之第十章信号-用信号和非局部转移函数写非阻塞的IO函数
- UNIX环境高级编程学习笔记:9_12 孤儿进程 孤儿进程组
- UNIX环境编程学习笔记(24)——信号处理进阶学习之信号集和进程信号屏蔽字
- UNIX环境高级编程学习之第十三章守护进程 - 单实例的守护进程
- UNIX环境高级编程学习之第七章进程环境-存储器分配malloc
- UNIX环境高级编程学习之第三章文件IO-文件写操作
- UNIX环境编程学习笔记(24)——信号处理进阶学习之信号集和进程信号屏蔽字
- UNIX环境高级编程学习之第七章进程环境-环境变量表读取/添加/修改/删除
- UNIX环境高级编程第十章信号 读后笔记
- UNIX环境高级编程学习之第九章进程关系-创建孤儿进程
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Select模型(多路复用), 实用Socket通信模板。
- UNIX环境高级编程学习之第八章进程控制-用父子进程实现打开kate,返回kate关闭状态
- UNIX环境高级编程学习之第三章文件IO-文件读操作
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- UNIX环境高级编程学习之第十六章网络IPC:套接字 - 非阻塞的Socket通信Poll模型(多路复用), 实用Socket通信模板
- UNIX环境高级编程学习之第三章文件IO-文件读偏移操作
- UNIX环境高级编程学习之第十五章进程间通信 - 通过半双工匿名管道实现父子进程通信
- Unix环境高级编程学习笔记之进程环境(1)