捕捉信号的总结
程序员文章站
2022-07-12 10:28:51
...
这时第二次写Linux博客,有点牵强,因为实在不熟,只是粗鲁的总结。
这次我要说的是捕捉信号,那么什么是捕捉信号呢?以及它如何实现和使用?这是我总结的用意。
捕捉信号的概念:如果信号的处理动作是用户自定义函数,在信号传递时就调用这个函数,这称为捕捉信号。
这是别人总结的一个图,我在这借用一下:
- 捕捉信号的实现:用sigaction()函数实现
这个函数的头文件是#include<signal.h>,
用此函数时,一定要写头文件,不然可惨了,我就犯了这么一个错误。
函数的原型:
int sigaction(int signo,const struct sigaction *act, struct sigaction *oact);
下面的实我在库里面的截图:
各个参数的含义:
sigaction():读取和修改与指定信号有关的处理动作,调用成功返回0,出错返回-1;
signo:指定信号的编号;
act:是一个输入型参数,用于修改该信号的处理动作(handler表);
oact: 是一个输出型参数,该信号的原来的处理动作;
下面的是这个结构体:
struct sigaction
{
void (*sa_handler)(int);
int sa_flags;
sigset sa_mask;
void (*sa_sigaction)(int,siginfo_t*,void*);
};
sa_handler赋值为一个函数指针时:该函数返回值为void,可以带一个int类型的参数,这个参数表示当前信号的编号(即可以使用一个函数处理多个信号);它是一个回调函数,是被系统调用的;
3、pause(挂起等待)
其头文件:#include<unistd.h>
其原型:int pause(void);
pause函数使调用进程挂起等待直到有信号传达,它只有在出错的情况下才有返回值;返回“EINTR”表示“被信号中断”;
4、 下面使用alarm和pause实现sleep()函数
Sleep(n):n表示挂起n秒;
以下是实现的代码:
下面是我运行的结果:
上一篇: HDFS进阶总结