信号章节 -- 信号章节总体概要
信号基本概念
信号是异步事件,发送信号的线程可以继续向下执行而不阻塞。
信号无优先级。
1到31号信号是非实时信号,发送的信号可能会丢失,不支持信号排队。
31号信号到64是实时信号, 发送的信号都会被接收, 支持信号排队。
信号在Linux内核头文件中的宏定义
信号的处理
由于进程启动时,SIGUSR1和SIGUSR2被忽略,一般我们可以在有需要时,去捕获这两个信号,进而调用自己的处理函数。相应的,我们的程序其他地方去发送相应的信号。
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; }