什么是Linux的信号

什么是Linux的信号,第1张

信号就是Linux中产生的某个事件,接收到信号的进程会采取相应的行动,信号由shell和终端处理器产生来引起中断,还可以作为进程传递消息和修改默认行为的一种方式。简单的,可以理解成Linux系统与进程的一种“交互”方式,像在终端中按下的Ctrl+C、Ctrl+Z组合键所产生的都是属于信号。

信号是否阻塞,只是信号mask的状态,决定对将来收到信号的处理方式。

无论你是否给他信号,这个状态都已经设定。

这个代码先block SIGINT, 然后sleep 10秒等待信号. 10秒后,检查10秒内是否输入了SIGINT信号.(如果输入了,会被block, handler不会被调用, sleep会被中断.). 不管如何,随后立即解除对SIGINT的block. 最后,进入死循环,这时如果ctrl+C, 会发现 handler能被调用.

相同点:

消息和信号的运用都可以为任务事件驱动

不同点:

1、信号只能是固定的几个(如SIGINT),且接收对象只能是进程。而消息的对象可以是进程,也可以为线程。

2、信号不需要创建,系统是识别的,用kill -l 可以查看完整的信号列表,没有大小的讨论。消息需要申请消息队列资源,返回的是消息队列的句柄,打进的消息体长度、消息的数量、消息队列总的容量只受系统消息队列配置大小的限制。

3、消息在linux系统中,由用户层进入内核层队列,全为复制 *** 作,代价是4次拷贝。信号也需要调用系统调用,但信号本身成本低。

4、另外信号的使用会使阻塞的进程被中断掉。而消息没有这个功能。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8468947.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-16
下一篇 2023-04-16

发表评论

登录后才能评论

评论列表(0条)

保存