Linux怎么确定信号来源,Linux信号来源和捕获处理以及signal函数简介
1、信号是什么?信号本质是什么?
日常生活中,绿灯是一个信号,停止标牌是一个信号,裁判手势也是一个信号。
信号本质(计算机):软中断信号(signal,又简称为信号)用来通知进程发生了异步事件。在软件层次上是对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的。信号是进程间通信机制中唯一的异步通信机制,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。进程之间可以互相通过系统调用kill发送软中断信号。内核也可以因为内部事件而给进程发送信号,通知进程发生了某个事件。信号机制除了基本通知功能外,还可以传递附加信息。
2、信号的来源
信号来自内核, 生成信号的请求来自以下3个地方。
(1)用户
用户可以通过输入Ctrl-C, Ctrl-\等命令,或是终端驱动程序分配给信号控制字符的其他任何键来请求内核产生信号。
(2)内核
当进程执行出错时, 内核给进程发送一个信号。 例如,非法段存取,浮点数溢出,亦或是一个非法指令,内核也利用信号通知进程特定事件发生。
(3)进程
一个进程可以通过系统调用kill给另外一个进程发送信号, 一个进程可以和另一个进程通过信号通信。
3、信号类型
4、信号捕获处理
进程能够通过系统调用signal告诉内核, 它要如何处理信号, 进程有3个选择。
(1)接收默认处理(通常是消亡)
SIGINT的默认处理是消亡, 进程并不一定要使用signal接收默认处理,但是进程能够通过以下调用来恢复默认处理。
signal(SIGINT, SIG_DFL);
(2)忽略信号
程序可以通过以下调用来告诉内核, 它需要忽略SIGINT。
signal(SIGINT, SIG_IGN);
(3)信号处理函数
程序能够告诉内核,当程序到来时应该调用哪个函数。
signal(signum, functionname);
5、信号处理例子
(1)默认处理信号
#include#includeint main()
{
signal(SIGINT,SIG_DFL);
int i;
for( i = 0; i<10;++i)
{
printf("hello world\n");
sleep(1);
}
return 0;
}
(2)忽略信号
#include#includeint main()
{
signal(SIGINT,SIG_IGN);
int i;
for( i = 0; i<10;++i)
{
printf("hello world\n");
sleep(1);
}
return 0;
}
(3)使用信号处理处理函数
#include#includeint main()
{
void f(int);
signal(SIGINT,f);
int i;
for( i = 0; i<10;++i)
{
printf("hello world\n");
sleep(1);
}
return 0;
}
void f(int signum)
{
printf("SIGINT\n");
}
六、另外补充(sigaction函数)
(1) https://blog.csdn.net/u010889616/article/details/48159537(推荐)
(2)https://blog.csdn.net/wallaceli1981/article/details/4293324
Linux怎么确定信号来源,Linux信号来源和捕获处理以及signal函数简介相关推荐
- C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)
文章目录 描述 声明 参数 返回值 实例 附加解释 背景知识:C语言中signal函数简介及使用 描述 C 库函数 void (*signal(int sig, void (*func)(int))) ...
- Linux环境进程间通信(二): 信号--转载
http://www.ibm.com/developerworks/cn/linux/l-ipc/part2/index1.html http://www.ibm.com/developerworks ...
- Linux系统编程(四)信号
Linux系统编程(四)信号 一.什么是信号? 1.信号的本质 2.信号来源 硬件来源 软件来源 二.常见信号 1.可靠信号和不可靠信号 2.不可靠信号主要有以下问题: 3.可靠信号与不可靠信号注册机 ...
- linux 可定义信号数,Linux系统编程(20)——信号基本概念
信号及信号来源 信号是在软件层次上对中断机制的一种模拟,在原理上,一个进程收到一个信号与处理器收到一个中断请求可以说是一样的.信号是异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知 ...
- linux信号11sigtstp,Linux信号(signal)机制
信号(signal)是一种软中断,信号机制是进程间通信的一种方式,采用异步通信方式 一.信号类型 Linux系统共定义了64种信号,分为两大类:可靠信号与不可靠信号,前32种信号为不可靠信号,后32种 ...
- linux c 禁止对外通信,Linux c 屏蔽信号、切换信号
信号导致的问题 不是任何信号我们都需要的,如果遇到我们不想处理的信号,我们怎么避免这个信号? 1. 信号屏蔽 intsigprocmask(int how,//操作方式 SIG_BLOCK屏 ...
- linux信号管道,linux编程及应用任继平08 进程间通信-管道和信号.pptx
linux编程及应用任继平08 进程间通信-管道和信号 管道示例 牛牛文库文档分享创建无名管道 牛牛文库文档分享文件描述符重定向 (1)cattest02test02 2>error test0 ...
- Linux io模型及函数调用,Linux 网络编程的5种IO模型:信号驱动IO模型
Linux 网络编程的5种IO模型:信号驱动IO模型 背景 这一讲我们来看 信号驱动IO 模型. 介绍 情景引入: 在信号驱动IO模型中,当用户线程发起一个IO请求操作,会给对应的socket注册一个 ...
- linux内核定义的常用信号6,Linux中的信号
在 Linux 中,理解信号的概念是非常重要的.这是因为,信号被用于通过 Linux 命令行所做的一些常见活动中.例如,每当你按 Ctrl+C 组合键来从命令行终结一个命令的执行,你就使用了信号.每当 ...
最新文章
- Hexo博客NexT主题美化之评论系统
- 问题集锦(36-40)
- JSP内置对象(request、session、application)
- [NOIP1999] 普及组
- python3怎么使用qstring_请问PyQt的QString和python的string的区别?
- 7-49 打印学生选课清单 (25 分)(思路+详解+map做法(一对多)+超时解决)Come baby!
- 应用c语言编辑画图程序,应用C语言编辑画图程序
- 使用Spring Boot Actuator、Jolokia和Grafana实现准实时监控
- 【leetcode dp】629. K Inverse Pairs Array
- Laravel 5 的 Simple Captcha 包
- 基于RxJava2+Retrofit2精心打造的Android基础框架
- 服务器挂存储系统启不,应用服务器重新启动后无法加载多路径软件
- SVN服务器使用(一)
- 如何把手机变成你的救生设备
- Android开发学习笔记(11):NDK与Cygwin配置手顺
- 京东Cookie抓取
- 物联网全栈开发实战系列文章汇总(共865篇,持续更新-2023.05.02)
- 『R语言Python』建模前的准备:连续型与离散型变量探索,离散型变量转为虚拟变量
- 计算机win7如何连接wifi网络,笔记本怎么连接wifi,教您笔记本怎么连接Wifi
- 运动学解析~旋转矩阵推导
热门文章
- python小细节之else
- C/C++可变参函数示例
- P1064 金明的预算方案(分组背包)
- “2021ISIG中国产业智能大会低代码峰会”即将开幕,钉钉宜搭叶周全受邀出席
- 每秒8.8亿次请求!让数据存得起,看得见 - 云原生多模数据库Lindorm 2020双十一总结
- 结合传统与数字技术,构建逼真的机械设计
- 《教你10分钟制作3D网游》视频吐槽
- 基于组块设计执行开放世界等距游戏引擎
- Java面试题 String类能不能被继承?为什么?
- [MySQL FAQ]系列 — 线上环境到底要不要开启query cache