系统编程-信号-总体概述和signal基本使用

信号章节 -- 信号章节总体概要

系统编程-信号-总体概述和signal基本使用

 

信号基本概念

系统编程-信号-总体概述和signal基本使用

信号是异步事件,发送信号的线程可以继续向下执行而不阻塞。

 

信号无优先级。

1到31号信号是非实时信号,发送的信号可能会丢失,不支持信号排队。

31号信号到64是实时信号, 发送的信号都会被接收, 支持信号排队。

 

信号在Linux内核头文件中的宏定义

系统编程-信号-总体概述和signal基本使用

 

信号的处理

系统编程-信号-总体概述和signal基本使用

由于进程启动时,SIGUSR1和SIGUSR2被忽略,一般我们可以在有需要时,去捕获这两个信号,进而调用自己的处理函数。相应的,我们的程序其他地方去发送相应的信号。

 

signal函数原型 以及使用时所要包含的头文件

系统编程-信号-总体概述和signal基本使用

和下面的是等价的:

系统编程-信号-总体概述和signal基本使用

 

实验1  signal基本使用

实验1.1

#include <stdio.h> #include <signal.h> #include <unistd.h> //定义信号处理函数 //signo: 进程捕获到的信号 void sig_handler(int signo){ printf("%d, %d occured \n", getpid(), signo); } int main(){ #if 1 // 屏蔽这块代码,就是不捕获这俩信号 //向内核登记信号处理函数以及信号值 if(signal(SIGTSTP, sig_handler) == SIG_ERR){ perror("signal error"); } if(signal(SIGINT, sig_handler) == SIG_ERR){ perror("signal sigint error"); } #endif while(1){ sleep(1); printf("- hello -\n"); }; return 0; }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxxww.html