SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

一、信号的概念

使用信号进行进程间通信(IPC)是UNIX的一种传统机制,Linux也支持这种机制

 

每一个信号都有一个名字,这些名字都以SIG开头。如SIGINT表示终端中断(Ctrl + C产生),SIGQUIT表示终端退出,SIGIO表示异步I/O

第十章:信号 随笔 第1张

第十章:信号 随笔 第2张

 

对于信号的处理,我们可以有以下几种方式:

1. 忽略此信号,但是SIGKILL和SIGSTOP不能忽略,因为这两个信号向内核提供使进程终止的方法

2. 捕捉并处理信号

3. 执行系统默认动作,如Ctrl + C就是终端中断,程序中不做任何信号处理

 

二、signal()函数

signal()函数的使用方法:

1. 包含头文件:#include <signal.h>

2. 定义信号处理函数:typedef void (*sighandler_t)(int signum),其中的signum是信号名

3. 注册信号:signal(int signum, sighandler_t handler);

 

示例如下:

 1 #include <stdio.h>
 2 #include <unistd.h>
 3 #include <signal.h>
 4 
 5 static void sig_handler(int signo)
 6 {
 7     printf("RECV SIGNO: %d\n", signo);
 8 }
 9 
10 int main()
11 {    
12     signal(SIGINT, sig_handler);
13     
14     while (1) {
15         sleep(1000);
16     }
17 
18     return 0;
19 }

执行此代码,当我们在命令行中按下Ctrl + C,程序不会退出,而是会打印:^CRECV SIGNO: 2

按下Ctrl + Z退出程序

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄