Unix进程间通信 - 信号
信号是在软件层次上对中断机制的一种模拟,是一种异步通信方式。
内核向进程发送信号 - -> 进程停止当前的处理响应信号 - -> 信号操作处理完毕 - -> 进程继续执行原来的程序
linux内核通过信号通知用户进程,不同的信号类型代表不同的事件。
查看linux支持的信号类型:

信号的前31中是早期Unix系统继承来的,由于前31种信号不支持排队,有可能会造成信号的丢失,前31种信号也叫做不可靠信号。后31种是linux扩展的支持信号排队,又叫做可靠信号、实时信号。
- 进程对信号有不同的响应方式:
1.缺省方式
2.忽略信号,进程可以设置忽略某些信号,不做处理
3.捕捉信号,进程可以设置某种信号到来时转而处理某一事先定义好的操作(类似于中断处理函数)
- 常用信号


信号相关命令
kill I-signal] pid
- 默认发送SIGTERM
- -sig 可指定信号
- pid指定发送对象
1 | kill [-signal] pid # 默认不带信号选项kill发送的是15)SIGTERM信号:kill pid |
kill:向进程发信号,从字面上翻译是“杀死“的意思,但其实是向进程发信号,原因是因为大部分信号是用于杀死一个进程。
killall [-u user | prog] ( |是或者的意思)
默认发送SIGTERM
prog指定进程名
user指定用户名
1 | killall -u linux # 向linux用户创建的所有进程发信号,默认发送SIGTERM |
普通用户用kill、killall命令只允许向自己创建的进程发信号
小结:
信号可以发送给前台进程也可以发送给后台进程
信号相关的函数
发送信号:
1 |
|
设置闹钟:
1 | int alarm(unsigned int seconds); |
示例:
1 |
|
终端输出:
1 | $./a.out |
重要:alarm经常用于实现超时检测,例如:网络通信的时候。
设置信号的响应方式
1 |
|
示例:
1 | //头文件省略 |
小结:
kill/raise函数是向进程发信号
alarm函数是给进程设置定时器,定时到了,内核会给进程发送SIGALARM信号
signal函数将一个信号类型和某个处理函数绑定
- 本文作者: 龙兄嵌入式
- 本文链接: https://hexo.880755.xyz/1970/01/01/zblog/download/44.Unix进程间通信 - 信号/