第十章:信号
SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
一、信号的概念
使用信号进行进程间通信(IPC)是UNIX的一种传统机制,Linux也支持这种机制
每一个信号都有一个名字,这些名字都以SIG开头。如SIGINT表示终端中断(Ctrl + C产生),SIGQUIT表示终端退出,SIGIO表示异步I/O
对于信号的处理,我们可以有以下几种方式:
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退出程序

更多精彩