信号处理函数(3)-sigaction() 为信号注册信号捕捉函数
定义:
int sigaction(int signum,const struct sigaction *act ,struct sigaction *oldact);
表头文件:
#include<signal.h>
说明:
sigaction()会依参数signum指定的信号编号来设置该信号的处理函数。参数signum可以指定SIGKILL和SIGSTOP以外的所有信号。
如参数结构sigaction定义如下
struct sigaction
{
void (*sa_handler) (int);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer) (void);
}
sa_handler: 函数指针,指定当信号到来时由哪个函数来处理,函数原型为 void foo(int);
sa_mask: 临时屏蔽字,在处理信号时,屏蔽哪些信号。
sa_flags 用来设置信号处理的其他相关操作, 可设置为0
返回值:
执行成功则返回0, 如果有错误则返回-1。
示例:
#include <stdio.h>
#include <unistd.h>
#include <signal.h> void recv_sig(int num)
{
int n = ;
printf("I have received a signal\n");
while(n--) {
printf("num = %d\n", num);
sleep();
}
} int main()
{
struct sigaction act;
act.sa_handler = recv_sig;
sigemptyset(&act.sa_mask);
// 当处理SIGUSR1信号时,暂时屏蔽SIGQUIT信号
sigaddset(&act.sa_mask, SIGQUIT);
act.sa_flags = ; sigaction(SIGUSR1, &act, NULL); while() {
printf("*************\n");
sleep();
}
return ;
}
运行结果:
yongdaimi@iMac:~/Documents/code$ ./app
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
*************
I have received a signal
num = 10
num = 10
num = 10
^\num = 10
num = 10
退出 (核心已转储)
信号处理函数(3)-sigaction() 为信号注册信号捕捉函数的更多相关文章
- 信号处理signal、sigaction、pause、信号嵌套处理、不可重入函数
信号的捕捉和处理 主要由signal和sigaction函数来完成.还有一个函数pause,它可用来响应任何信号,不过不做任何处理. 1.signal函数 typedef void (*sighand ...
- signal函数、sigaction函数及信号集(sigemptyset,sigaddset)操作函数
信号是与一定的进程相联系的.也就是说,一个进程可以决定在进程中对哪些信号进行什 么样的处理.例如,一个进程可以忽略某些信号而只处理其他一些信号:另外,一个进程还可以选择如何处理信号.总之,这些总与特定 ...
- linux系统编程之信号:信号发送函数sigqueue和信号安装函数sigaction
信号发送函数sigqueue和信号安装函数sigaction sigaction函数用于改变进程接收到特定信号后的行为. sigqueue()是比较新的发送信号系统调用,主要是针对实时信号提出的(当然 ...
- POSIX信号和自定义signal函数
一.信号的概念 信号(signal)就是告知某个进程发生了某个事件的通知:信号通常是异步发生的,也就是说接受信号的进程不知道信号的准确 发生时刻:信号可以(1)由一个进程发给另一个进程:(2)由内核发 ...
- UNIX高级环境编程(13)信号 - 概念、signal函数、可重入函数
信号就是软中断. 信号提供了异步处理事件的一种方式.例如,用户在终端按下结束进程键,使一个进程提前终止. 1 信号的概念 每一个信号都有一个名字,它们的名字都以SIG打头.例如,每当进程调用了ab ...
- 三十一、Linux 进程与信号——SIGCHLD 信号、kill和raise函数以及alarm函数
31.1 SIGCHLD 信号 子进程状态发生变化(子进程结束)产生该信号,父进程需要使用 wait 调用来等待子进程结束并回收它. 避免僵尸进程 #include <stdio.h> # ...
- 三十三、Linux 进程与信号——中断系统调用和函数可重入性
33.1 中断系统调用 进程调用 “慢” 系统调用时,如果发生了信号,内核会重启系统调用. 慢系统调用 可能会永久阻塞的系统调用 从终端设备.管道或网络设备上的文件读取 向上述文件写入 某些设备上的文 ...
- 三十四、Linux 进程与信号——信号特点、信号集和信号屏蔽函数
34.1 信号特点 信号的发生是随机的,但信号在何种条件下发生是可预测的 进程杠开始启动时,所有信号的处理方式要么默认,要么忽略:忽略是 SIGUSR1 和 SIGUSR2 两个信号,其他都采取默认方 ...
- 【APUE】关于信号的一些常用函数
kill和raise函数 #include <signal.h> int kill(pid_t pid,int signo); int raise(int signo);//两个函数返回值 ...
随机推荐
- [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间
最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会. 1.我首先需要知道哪些函数执行了多少时间 ...
- C#中使用SQLite数据库简介(下)
[SQLite管理工具简介] 推荐以下2款: Navicat for SQLite:功能非常强大,几乎包含了数据库管理工具的所有必需功能,操作简单,容易上手.唯一的缺点是不能打开由System.Dat ...
- mongodb pymongo.errors.CursorNotFound: Cursor not found, cursor id: 82792803897
默认 mongo server维护连接的时间窗口是十分钟 默认 单次从 server获取数据是101条或者 大于1M小于16M的数据 所以默认情况下,如果10分钟内未能处理完数据,则抛出该异常. 解决 ...
- hdu 1024 dp滚动数组
#include <cstdio> #include <iostream> #include <algorithm> #include <queue> ...
- Atlassian官方合作伙伴
Atlassian官方合作伙伴 http://atlassian.csdn.net/m/btc/atlassian/index
- js 构造函数(construction)与原型(prototype)
1.面向对象:js原型 java有class和instance,js仅仅有构造函数(function Cat(name,age){this.name=name;this.age=age}),为了实现数 ...
- tasklist、taskkill、taskmgr
1.tasklist 列出所有的进程,使用tasklist |findstr xxx , 选取进程 2.taskkill 杀掉进程,使用 taskkill /f /pid 1235 3.taskmg ...
- authpuppy 认证服务器搭建
此文仅限于搭建authpuppy认证服务器,不包含认证插件等安装,仅说明步骤以备下次安装忘记步骤.耽误时间. 环境:ubuntu10.04 软件版本:authpuppy-1.0.0-stable.tg ...
- GTID数据库备份
rhel6系统中,mysql 5.6复制新特性下主从复制配置[基于GTID] 1.mysql5.6在复制方面的新特性: (1).支持多线程复制:事实上是针对每个database开启相应的独立线程,即每 ...
- UNIX网络编程读书笔记:select函数
select函数概况: select函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或多个事件发生或经历一段指定的时间后才唤醒它. 作为一个例子,我们可以调用select,告知内核仅在下 ...