C++ signal和sigaction信号处理

本文详细探讨了C++中用于信号处理的`signal`和`sigaction`函数。`signal`函数在不同的Linux系统中可能有所不同,现在较少使用,主要用法包括注册对SIGALRM(超时)、SIGINT(Ctrl+C)和SIGCHLD(子进程结束)的响应。`alarm`函数用于设置超时信号。而`sigaction`函数提供了更高级的信号处理能力,可以设置信号处理函数、屏蔽信号集和标志。示例代码展示了如何使用`sigaction`注册信号处理函数。
摘要由CSDN通过智能技术生成

本文介绍两个信号处理机制signal和sigaction。

一 signal

void (*signal(int signo, void (*func)(int)))(int); // 该函数在不同的linux系统中可能会存在差别,该函数现在很少用
 参数:int signo, void(* func)(int)
 返回类型:参数为int型,返回void型函数指针
 调用上述函数时,第一个参数为特殊情况信息,第二个参数为特殊情况下要调用的函数的地址值(指针)。当发生第一个参数
 代表的情况的时候,调用第二个参数所指的函数。

 singal函数中注册的部分特殊情况和对应的常数
 SIGALRM:已到通过调用alarm函数注册的时间
 SIGINT:输入CTRL+C
 SIGCHLD:子进程终止

unsigned int alarm(unsigned int seconds)
 该函数接收一个正整型参数,相应的时间(以秒为单位)后将产生SIGALRM信号,若向该函数传递0,则之前对SIGALRM信号的预约将取消
 如果通过该函数预处理信号后未指定该信号对应的处理函数,则终止进程,不做任何处理。

示例:(产生信号时会唤醒处于睡眠状态的进程,所以下面的示例执行不到100秒)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值