linux软件安装完成信号,Linux信号机制解析
在Linux中信号也称为软中断,进程在收到信号之后在对信号进行处理,可以说就是一个中断的过程。本文就来为大家简单地解析一下Linux信号机制。
1、安装信号处理函数
在系统编程的层面上与信号的处理关系最直接相关的函数有两个,他们用来安装信号处理函数:
sighandler_t signal(int signum, sighandler_t handler);
int sigaction(int signum, const struct sigaction *act,,struct sigaction *oldact);
第一个函数signal比较简单,sighandler_t 是一个别名,其原型是 typedef void (*sighandler_t)(int),他是一个函数指针,接受一个类型为int的参数(信号的编号),返回void。例如要对SIGUSR1信号进行处理:
void handler(int sig)
{
//strsiganl 功能是把信号的编号转为信号说明的字符串
printf(“Rcv a signal:%s”,strsignal(sig));
}
int main()
{
signal(SIGUSR1,handler);
while(1)
;
}
(这段程序其实是有问题的,后面会说到)这段程序本来是一段死循环,但是对他发送SIGUSR1信号,程序会从while中“中断”转去执行handler中的代码。在shell中使用kill命令发送信号SIGUSR1 于是程序就答应出了一段这样的信息:Rcv a signal:User defined signal 1。signal()的用法几乎就是这么简单。但是由于可移植的原因,参与项目开发时,应该使用下面的这个函数。
sigaction()函数的参数中有两个结构体,其man手册原型如下:
struct sigaction {
void (*sa_handler)(int);
void (*sa_sigaction)(int, siginfo_t *, void *);
sigset_t sa_mask;
int sa_flags;
void (*sa_restorer)(void);
};
据我所知sa_handler和sa_sigaction其实是在一个union中,他们都是指向信号处理函数的指针。
sa_mask 是要屏蔽的信号,sa_flags 有多种选项。(关于这两点后文再细说)。从sigaction()原型中可以发现参数中有两个struct sigaction参数,其中act是要安装的信号处理,而oldact是用来带回原来的处理方式方便我们处理完信号后的恢复。如果不需要拿回之前的信号处理方式可以把第三个参数置为NULL,反之如果只想得到之前的处理方式而不像安装新的信号处理,可以把第二个参数置为NULL,这点用signal()是办不到的。用sigaction()改写上面的例子是这样的:
1 void handler(int sig)
2 {
3 printf(“Rcv a signal:%s”,strsignal(sig));
4 }
5
6 int main()
7 {
8 struct sigaction act;
9 sigemptyset(&act.sa_mask);
10 act.sa_handler = handler;
11 act.sa_flags = 0;
12 sigaction(SIGUSR1,&act,NULL);
13 while(1)
14 ;
15 }
linux软件安装完成信号,Linux信号机制解析相关推荐
- linux软件安装非系统盘,linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装...
linux操作系统可不可以像安装windows软件一样在windows系统下的硬盘上安装 答案:2 信息版本:手机版 解决时间 2020-07-24 14:13 已解决 2020-07-23 16: ...
- android安装linux软件安装,Android for Linux 开发工具安装说明
在此详细记录 Android 开发工具的安装过程,以备后查. 在 Windows 7 下使用虚拟机进行,也可以直接用 Ubuntu 安装光碟做一个真实环境 虚拟机:VirtualBox 3.2.12( ...
- Linux软件安装解决方案
Linux软件安装解决方案 在linux中安装软件是一件并不算轻松的工作,有很多中解决方案供你选择,但需要的是你的一点点耐心与智慧!下面我将就Linux中最常见的安装方式,由浅入深的逐一做简单介绍与 ...
- linux软件安装方法
在Linux系统中,软件安装程序比较纷繁复杂,不过最常见的有两种: 1)一种是软件的源代码,您需要自己动手编译它.这种软件安装包通常是用gzip压缩过的tar包(后缀为.tar.gz). 2)另一种是 ...
- Linux软件安装——软件包
Linux软件安装--软件包 摘要:本文主要学习了Linux下软件安装的相关知识. 软件包 简介 Linux下的软件包众多,且几乎都是经GPL授权.免费开源(无偿公开源代码)的.这意味着如果你具备修改 ...
- 6、Linux软件安装管理之——dpkg与apt-*详解
一.序言 上一篇文章<Linux软件安装管理之--源码安装详解>详细介绍了Linux平台下的源码包安装原理,虽然使用源代码进行软件编译可以具有定制化的设置,但对于Linux distrib ...
- Linux源代码软件安装,Linux软件安装:源代码与软件安装
欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 Linux软件安装:源代码与软件安装 1 开源软件的一些基本概念 1.1 什么是开放源码,编译程序与可执行文件 可执行文件 ...
- Linux软件安装——安装软件的命令
Linux软件安装--安装软件的命令 摘要:本文主要学习了如何在Linux系统中安装.更新.卸载软件. rpm命令 rpm命令用来在Linux系统上进行软件的安装. 基本语法 安装命令: 1 rpm ...
- linux软件安装管理
Linux软件安装管理 TonyLinux系统工程师 难度初级 时长 3小时 6分 学习人数64016 综合评分9.8 收藏 上面是linux 的源代码安装包 linux有两种类型的软件安装方式 ...
- Linux软件安装方法小结
Linux软件安装方法小结(附:rpm详解) 在使用Linux系统的过程中,软件包的安装是避免不了的,在Linux下,软件安装程序的种类很多,安装方法也各式各样,(舒适性自然比不上windows :- ...
最新文章
- 《你的灯亮着吗》读书笔记1
- Nature子刊 | 研究人员提出神经脆性可作为癫痫发作区(SOZ)的脑电图(EEG)标志物
- Understand Skills-Based Routing
- 判断DataRow中某列是否为空的方法
- java map去重复的数据_使用HashMap去重复数据.
- 使用bypy从ubuntu通过命令行上传文件到百度云
- Zcash已发布ZIP 313提案
- 升级glibc库到glibc-2.14.1
- sts4linux,STS3下载和安装,STS4升级
- 百度万年历API 获取节假日和工作日调休
- 软考高级信息系统项目管理师/高项和PMP的区别,以及对比
- qc快充协议2.0/3.0
- TDS:标签平台+API平台+数据共享平台,助力数据运营平台建设
- pdfbox / XSL + FOP 转换 PDF文档
- 大众点评评论抓取-加密评论信息完整抓取
- 基于LBS的六边形热力图算法
- 正确理解以下名词及其含义:(1)源程序,目标程序,可执行程序(2)程序编辑,程序编译,程序连接(3)程序,程序模块,程序文件 (4)函数,主函数,被调用函数,库函数
- idea中vue文件 游览器图标_vue项目中icon图标的完美引入
- 学计算机游戏本,2019游戏笔记本推荐_新学期游戏本准备好了吗-太平洋电脑网
- webview卡顿_分享三个小技巧,微信卡顿的人千万不要错过哦
热门文章
- 8.软件架构设计:大型网站技术架构与业务架构融合之道 --- 高并发问题
- 1.卷1(套接字联网API)---简介
- 110. PHP 读取 ini ,ftp 上传
- 7. JavaScript RegExp 对象
- css3中的background的新特性background-origin,background-clip,background-size详解
- css3中的box-shadow的用法与text-shadow的用法
- dubbo入门之微服务客户端服务端配置
- Amazon AWS S3 上传文件 并获取公用url
- 【R语言进行数据挖掘】决策树和随机森林
- 将集合类转换成DataTable