目录
一、认识信号
信号,顾名思义,是Linux操作系统提供给用户用来给其他进程发送异步信息的一种方式。
在时间线上,信号历程分别是信号的产生、进程保存信号、进程处理信号,我们从这三个方面理解信号。
- 常见信号
执行命令kill -l
kill -l
没有0、32、33信号,其中从34号信号开始,均为SIGRT*,这一类为实时信号,要求进程实时响应,但现代操作系统普遍是分时操作系统,因此34-64信号对学习意义不大。
此外,信号的名称本质是宏定义。
- 进程处理信号的方式
三种。
1.该信号的默认处理方式,比如发送2号信号就是终止进程,9号信号就是强制杀死信号。
2.捕捉信号,然后自定义处理,需要用到signal系统调用。
3.进程忽略掉了这个信号。
二、信号的产生
1.命令行kill
在命令行使用kill命令指定某一个进程,发送特定信号。命令行kill本质上也是一个可执行程序,内部封装了系统调用kill。
//向PID为1688的进程发送9号信号
kill -9 1688
2.键盘产生信号
键盘组合键,ctrl+c对应(2)SIGINT、ctrl+\对应(3)SIGQUIT、等等,这些组合键在键盘按下后,通过硬件中断技术,被CPU获取到,然后被解析为命令发送给操作系统,被操作系统识别后发送对应信号给前台进程。
3.系统调用
和信号相关的系统调用。
kill:对任意进程发送任意信号。
KILL(2) Linux Programmer's Manual KILL(2)
NAME
kill - send signal to a process
SYNOPSIS
#include <sys/types.h>
#include <signal.h>
int kill(pid_t pid, int sig);