欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

捕捉信号的总结

程序员文章站 2022-07-12 10:28:51
...

这时第二次写Linux博客,有点牵强,因为实在不熟,只是粗鲁的总结。
这次我要说的是捕捉信号,那么什么是捕捉信号呢?以及它如何实现和使用?这是我总结的用意。

捕捉信号的概念:如果信号的处理动作是用户自定义函数,在信号传递时就调用这个函数,这称为捕捉信号。
这是别人总结的一个图,我在这借用一下:
捕捉信号的总结

  1. 捕捉信号的实现:用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秒;

以下是实现的代码:
捕捉信号的总结

下面是我运行的结果:

捕捉信号的总结