【Linux/Unix系统编程手册笔记】信号

2016-08-02  本文已影响47人  666真666

基本概念

概述

信号是事件发生时对进程的通知机制,有时也称为软件中断,信号与硬件中断相似之处在于打断了程序执行的正常流程,大多数情况下,无法预测信号到达的精确时间。
一个具有合适权限的进程能够向另一进程发送信号,信号的这一用法可作为一种同步技术,甚至是进程通信IPC的原始形式。进程也可以向自身发送信号。然而发生进程的诸多信号,通常都是源于内核。

引发内核为进程产生信号的各类事件如下:

信号分两大类:

信号产生后,会稍后被传递给某一进行,而进程也会采取某些措施来响应信号,在产生和到达期间,信号处于等待状态。如果需要确保一段代码不为传递来的信号所中断,可将信号添加到信号掩码中,会阻止该信号的到达,直到稍后对其解除阻塞。

信号到达后,进程视具体信号执行如下默认操作之一:

程序能改变信号到达时的响应行为,称为对信号的处置设置:

信号类型和默认行为

Linux标准信号如下:

image
image

改变信号处置:signal()

void signal(int sig, void (*handler)(int))

信号处理器简介

信号处理器程序(也称为信号捕捉器)是当指定信号传递给进程时将会调用的一个函数,调用信号处理器程序,可能会随时打断主程序流程,内核代表进程来调用处理器程序,当处理器返回时,主程序会在处理器打断的位置恢复执行。

image

发送信号:kill()

与shell的kill命令类似,一个进程能够使用kill()系统调用向另一进程发送信号

int kill(pid_t pid, int sig)

检查进程的存在

上一篇 下一篇

猜你喜欢

热点阅读