一.基本概念
信号是Linux系统提供的一种,向指定进程发送特定事件的方式。
通过kill -l指令。即可查看系统中所有的信号,其中我们只关注1-31号,其他信号为实时信号不作考虑。
信号产生是异步的。
二.信号处理
- 默认动作
- 忽略动作
- 自定义处理-信号捕捉
进程处理信号,都是默认的,默认动作通常是:终止、暂停、忽略等。
自定义捕捉指定信号函数:
#include<signal.h>
sighandler_t signal(int signum,sighandler_t handler);
参数:
signum:信号值
handler:类型为void (*sighandler_t)(int)的函数指针。
该函数通过自定义一个函数操作,将其传入signal函数,随后通过信号signum执行该函数操作。
其中signum会作为handler函数的参数传入。
通过该函数修改指定信号的捕捉方式,再次调用该信号时,就会执行对应的handler函数。
同时可以对不同的信号传递相同的handler函数。
理解进程的发送与保存(浅度):
在进程的task_struct内部,存在能够保存信号的位图成员变量。
向进程发送信号,就是修改其PCB中的信号的指定位图,只有OS有这个权利。
三.信号产生
- 通过kill命令,向指定进程发送指定的信号。
- 键盘可以产生信号,如ctrl + c,即终止进程。
- 系统调用。
1.系统调用函数
#include<sys/types.h>
#include<signal.h>
int kill(pid_t pid,int sig);
向指定进程,发送指定信号。
#include<signal.h>
int raise(