完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 michael_llh 于 2016-10-15 14:48 编辑
这一讲我们来谈谈什么是信号,所谓的信号是一种内容受限的一种异步通信机制。那么为什么说是内容受限的呢?前面我们谈到的进程间通信的几种方式,包括管道,信号量,共享内存,消息队列,socket,这些通信方式我们是可以传输一定的数据量的,比如说我给你一个int类型的数据,或者是char型的数据,但是对于信号而言是实现规定好的,这个就和我们的海上交通的灯语是一样的,什么样的闪烁方式决定了什么样的通信内容,信号也是一样,什么样的信号决定什么样的进程处理方式。异步通信机制就比较明显了,两个进程之间彼此是不知道对方在作什么的,是两个完完全全的陌生人,所以两者直接的通信都是异步的。从本质上来说信号就是一个int类型的数据,只是这些数据都是事先规定好的。 那么信号一般是由谁发出来的呢? 1.一个就是我们的终端按键,如果你电脑按了关机,那这进程再厉害,能耐你何。 2.硬件异常,这个是有可能的,如果硬件出错错误,内核会发出相应的信号。 3.kill 命令,当我们杀死一个进程的时候,就是向这个进程发出信号“去死吧你” 4.软件满足条件,这个可以有软件运行发出,比如说alARM定时函数定时一个时间到了时候可以发出SIGAlarm信号。 那么收到信号的进程有几种处理信号的方式呢? 1.忽略信号,不鸟他 2.捕获信号,有效的信号给他捕获过来 3.默认处理,这个不是属于进程的管理了,而是系统默认进程应该如何对待这个信号 信号定义是放在/usr/include/x86_64-linux-gnu/bits下面有一个signum.h文件下,这里的x86_64-linux-gnu要视自己的Linux环境而定,但是一般都是以linux-gnu结尾的,我们打开之后就可以看到相应的信号定义了,这里我们直接将所有的信号列表贴出。
上面就是我们所有的信号定义了,包含我们所有的Linux支持的信号定义。另外我们可以使用命令kill -l来查看所有的信号定义。 那么我们在进程当中是使用哪个函数来进行对信号的处理呢? 我们一般使用的是signal函数进行处理信号的信息,那么函数的具体原型如下: #include typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); 包含在signal.h这个文件当中,那么这里我们看到我们需要定义一个信号处理函数,然后将我们的信号绑定到这个signal中对应的信号数字。(也就是我们上面列出的所有的关于信号的定义)。 |
|
相关推荐 |
|
只有小组成员才能发言,加入小组>>
「含关键代码」基于AM3352/AM3354/AM3359的Linux开发案例分享
4893 浏览 0 评论
87410 浏览 0 评论
【高手问答】如何做到精通linux技术?资深工程师带你突破难点
4724 浏览 2 评论
3619 浏览 2 评论
解读Linux :先从创建一个文件夹用来存放jdk压缩文件开始
2482 浏览 0 评论
1998浏览 3评论
1285浏览 1评论
求解:aarch64交叉编译工具已经安装成功,环境变量已经配置,怎么将系统架构切换为ARM的架构
1343浏览 0评论
电脑和虚拟机可以互ping,电脑和开发板也可以互ping,但是虚拟机和开发板ping不通是什么原因
1234浏览 0评论
1173浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-22 23:49 , Processed in 5.950445 second(s), Total 70, Slave 53 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号