您的位置首页>企业动态>

Linux下的信号机制

导读大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux下的信号机制问题。信号是软件级中断机制的模拟。原则上,接收信号的进程可以

音频解说

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解Linux下的信号机制问题。

信号是软件级中断机制的模拟。原则上,接收信号的进程可以说与接收中断请求的处理器相同。信号是异步的,一个进程不需要等待信号通过任何操作到达。事实上,这个过程不知道信号什么时候会到达。该信号可以直接在用户空间进程和内核进程之间交互,内核进程也可以用它来通知用户用户空间进程发生了什么系统事件。它可以在不知道进程状态的情况下随时发送到进程。如果进程当前没有执行,信号将由内核保存,直到进程恢复执行,然后传输给它。如果一个信号被进程阻塞,信号的传输将被延迟,直到阻塞被取消。

它是进程间通信机制中唯一的异步通信机制。它可以被视为异步通知,通知接收信号的进程发生了什么。经过Posix实时扩展,机制更加强大。除了基本的通知功能,它还可以传输附加信息。

信号的发生有两个来源:硬件来源(例如,我们按下了键盘上的按钮或其他硬件故障);软件来源,常用于发送信号的系统功能包括kill()、raise()、alarm()、setiTImer()和sigqueue()等。软件来源还包括一些非法操作。

一个进程可以通过三种方式响应信号。

1.忽略信号

忽略信号,即对信号不做任何处理。其中,有两个信号不可忽视:SIGKILL和SIGSTOP。

2.捕捉信号

定义信号处理功能,当信号出现时,执行相应的处理功能。

3.执行默认操作

Linux为每个信号指定了默认操作,如表1所示。

一个完整的信号生命周期可以分为三个重要阶段,其特征是四个重要事件:信号产生、过程中的信号注册、过程中的信号消除和信号处理功能执行。这里,信号的产生、配准和消除指的是信号的内部实现机制,而不是信号的功能实现。因此,信号是否注册与本节后面提到的发送信号功能(如kill())和信号安装功能(如signal())无关,只与信号值有关。

两个相邻事件之间的时间间隔构成了信号生命周期的一个阶段。需要注意的是,这里的信号处理方式有很多种,通常由内核来完成,当然也可以由用户进程来完成,这里就不明确指出了。

信号处理包括信号传输、捕获和信号处理,它们有各自对应的共同功能。

发送信号功能:kill(),raise()。

捕捉信号的功能:报警()和暂停()。

信号处理功能:信号()和信号动作()。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。