sighold,sigset,sigrelse,sigpause,sigignore
signal()
功能:信号管理功能
语法:#include
void (*signal(sig,disp))(int)
int sig;
void (*disp)(int);
void (*sigset(sig,disp))(int)
int sig;
void (*disp)(int);
int sighold(sig)
int sig;
int sigrelse(sig)
int sig;
int sigignore(sig)
int sig;
int sigpause(sig)
int sig;
说明:这些系统调用提供了应用程序对指定信号的简单的信号处理.
signal()和sigset()用于修改信号定位.参数sig指定信号(除了
SIGKILL和SIGSTOP,这两种信号由系统处理,用户程序不能捕捉到)
.
disp指定新的信号定位,即新的信号处理函数指针.可以为
SIG_IGN,SIG_DFL或信号句柄地址.
若使用signal(),disp是信号句柄地址,sig不能为SIGILL,SIGTRAP
或SIGPWR,收到该信号时,系统首先将重置sig的信号句柄为SIG_DFL,
然后执行信号句柄.
若使用sigset(),disp是信号句柄地址,该信号时,系统首先将该
信号加入调用进程的信号掩码中,然后执行信号句柄.当信号句柄
运行结束
后,系统将恢复调用进程的信号掩码为信号收到前的状态.另外,
使用sigset()时,disp为SIG_HOLD,则该信号将会加入调用进程的
信号掩码中而信号的定位不变.
sighold()将信号加入调用进程的信号掩码中.
sigrelse()将信号从调用进程的信号掩码中删除.
sigignore()将信号的定位设置为SIG_IGN.
sigpause()将信号从调用进程的信号掩码中删除,同时挂起调用
进程直到收到信号.
若信号SIGCHLD的信号定位为SIG_IGN,则调用进程的子进程在终
止时不会变成僵死进程.调用进程也不用等待子进程返回并做相
应处理.
返回值:调用成功则signal()返回最近调用signal()设置的disp的值.
否则返回SIG_ERR.
例子一:设置用户自己的信号中断处理函数,以SIGINT信号为例:
int flag=0;
void myself()
{
flag=1;
printf("get signal SIGINT\n");
/*若要重新设置SIGINT信号中断处理函数为本函数则执行以
*下步骤*/
void (*a)();
a=myself;
signal(SIGINT,a);
flag=2;
}
main()
{
while (1) {
sleep(2000); /*等待中断信号*/
if (flag==1) {
printf("skip system call sleep\n");
exit(0);
}
if (flag==2) {
printf("skip system call sleep\n");
printf("waiting for next signal\n");
}
}
}
sighold,sigset,sigrelse,sigpause,sigignore相关推荐
- 深入redis内部--初始化服务器
初始化服务器代码如下: void initServer() {int j;signal(SIGHUP, SIG_IGN); signal(SIGPIPE, SIG_IGN);setupSignalHa ...
- sigset 与 signal的区别?
阅读<深刻理解UNIX系统内核>的时候,了解到了关于信号的使用.回想起以前本身用过 signal()来处理信号,可是当时实践的时候有个错误的理解:信号处理只捕获一次信号,后面的信号都没捕获 ...
- Unix 多进程编程
一.多进程程序的特点 由于UNIX系统是分时多用户系统, CPU按时间片分配给各个用户使用, 而在 实质上应该说CPU按时间片分配给各个进程使用, 每个进程都有自己的运行环境 以使得在CPU做进程切换 ...
- Nuttx signal
Signal 基本数据结构和信号掩码说明 信号相关主要数据结构 struct sigactq {FAR struct sigactq *flink; /* Forward link */struct ...
- linux设置子线程的信号屏蔽器,[转载]linux信号屏蔽字
1. 概念: 信号屏蔽字就是进程中被阻塞的信号集, 这些信号不能发送给该进程, 它们在该进程中被"屏蔽"了. 后面我们会提到, 实际上它们是被阻塞了. 2. 信号屏蔽函数: #in ...
- linux任务处理函数,Linux信号掩码和信号处理函数
1.信号掩码--被阻塞的信号集 每个进程都有一个用来描述哪些信号传送来将被阻塞的信号集,如果某种信号在某个进程的阻塞信号集中,则传送到该进程的此种信号将会被阻塞.当前被进程阻塞的信号集也叫信号掩码,类 ...
- socket connect阻塞和非阻塞处理
建立socket后默认connect()函数为阻塞连接状态,在大多数实现中,connect的超时时间在75s至几分钟之间,想要缩短超时时间,可解决问题的两种方法:方法一.将socket句柄设置为非阻塞 ...
- ltp-ddt的makefile结构
顶层makefile COMMON_TARGETS := pan utils COMMON_TARGETS += tools testcases/ddt COMMON_TARGET ...
- linux c语言内核函数手册,Linux C函数实例速查手册
函数学习目录: 第1章 初级I/O函数 1.1 close函数:关闭已经打开的文件 1.2 creat函数:创建一个文件 1.3 dup函数:复制文件描述符 1.4 dup2函数:复制文件描述符到指定 ...
最新文章
- 和方舟rust一样的手游_方舟生存进化手游2.0版本的泰克科技有多强?恐龙大军都顶不住...
- JavaScript 要点(十四)HTML DOM 元素(节点)
- LCIS code force 10D
- 微信小程序 提示Toast
- CSDN产品公告:APP新增大厂在线刷题功能、博主排名规则更新、MD编辑器优化
- Linux打开rtf文档,在linux下设置开机自动启动程序的方法_精品.rtf
- 使用递归法求阶乘(C语言)
- 如何管理好IDC机房?(一)
- 浏览器同源与跨域问题总结
- Linux:shell变量功能和Bash shell的操作环境
- 4k hidpi 黑苹果_黑苹果如何通过开启HIDPI来增强显示效果?
- 康佳电视应用助手服务器连接超时,康佳盒子出现网络连接问题的原因,解决方式...
- 挪威议会邮件系统遭遇攻击,电子邮件安全该如何保障?
- 高琪300集——入门
- 物联网常见通信模块介绍
- 一元线性回归方程的建立
- idea2021.3CPU占用100%解决办法
- 【程序设计】暴力枚举
- Dennis MacAlistair Ritchie
- U-Boot启动参数详解(U-Boot-2014.07版本)