加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux进程间通信(四) 信号通信之信号发送捕捉 - Linux系统

发布时间:2013-12-08 11:46:30 所属栏目:Linux 来源:站长网
导读:信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验 信号概述 信号是在软件层次上对中断机制的一种模拟。在原理上,一个进程收到一个信号与
信号通信之信号发送捕捉kill()、raise()、alarm()、pause()及其基础实验

信号概述

信号是在软件层次上对中断机制的一种模拟。在原理上,一个进程收到一个信号与处理器 收到一个中断请求可以说是一样的。

信号是异步的,一个进程不必通过任何操作来等待信号的到达, 事实上进程也不知道信号到底什么时候到达。

信号可以直接进行用户空间进程和内核进程之间的交互 ,内核进程也可以利用它来通知用户空间进程发生了哪些系统事件。它可以在任何时候发给某一个进程,而无 需知道该进程的状态。如果该信号当前并未处于执行态(Running),则该信号由内核保存起来,直到该进程恢复 执行再传递给它为止。如果一个信号被进程设置为阻塞,则该信号的传递被延迟,直到其阻塞被取消时才被传 递给进程。

信号是进程间通信机制中唯一的异步通信机制,可以看作是异步通知,通知接收信号的进 程有哪些事件发生了。信号机制除了基本通知外,还可以传递附加信息。

信号来源

信号事件 发生的来源有两种:

① 硬件来源。如我们按下了键盘上的按钮 或者出现其他硬件故障;

② 软件来源。最常用发送信号的系统函数有kill()、raise()、alarm()、setitimer()和sigqueue()等,软件来 源还包括一些非法运算等操作。

进程响应信号的方式

① 忽略信号。忽略信号即对信号不做处 理,其中,有两个信号不能忽略:SIGKILL和SIGSTOP。

② 捕捉信号。定义信号处理函数,当信号发生 时,执行响应的处理函数。

③ 执行默认操作。Linux对每种信号都规定了默认操作,如下表所示:

信号的生命周期

一个 完整的信号生命周期可以分为3个重要阶段,这3个阶段由4个重要事件来刻画的;信号产生、信号在进程中注 册、信号在进程中注销、执行信号处理函数。这里信号的产生、注册、注销等是指信号的内部实现机制,而不 是信号的函数实现(不受我们的掌控)。因此信号注册与否与后面讲到的发送信号函数(如 kill()等)及信号 安装函数(如 signal()等)无关,只与信号值有关。

相邻两个事件的时间间隔构成信号生命周期的一 个阶段,如下图1.注意这里的信号处理有多种方式,一般是由内核完成的,当然也可以由用户进程来完成。

信号的处理包括信号的发送、捕捉和处理,它们有各自相对应的常见函数:

发生信号的函数 : kill()、raise()。

捕捉信号的函数: alarm()、pause()。

处理信号的函数: signal()、 sigaction()。

本节主要讲信号的发送与捕捉,下一节再讲处理

信号发送函数 kill()和raise ()

函数说明

kill()函数同咱们的kill系统命令一样(但不能误以为kill()就是kill哈),可以 发送信号给进程或进程组(实际上,kill系统命令只是kill()函数的一个用户接口)。这里需要注意的是, kill()函数不仅可以终止进程(实际上是通过发出SIGKILL信号终止),也可以向进程发送其他信号。

与kill()函数不同的是,raise()函数允许进程向自身发送信号。

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读