20201321周慧琳

第六章学习心得

知识点归纳


信号和信号处理;
信号和中断的统一处理
将信号视为进程中断,将进程从正常执行转移到信号处理
信号的来源,包 括来自硬件、异常和其他进程的信号
信号在Unix/Linux中的常见用法
Unix/Linux中的信号处理
信号类型
信号向量位
信号掩码位
进程 PROC结构体中的信号处理程序
信号处理步骤
Unix/Linux支持31种不同的信号,每种信号在signal.h文件中都有定义。

#define  	SIGHUP  	1
#define  	SIGINT  	2
#define  	SIGQUIT  	3
#define  	SIGILL  	4
#define  	SIGTRAP  	5
#define  	SIGABRT  	6
#define  	SIGIOT  	6
#define  	SIGBUS  	7
#define  	SIGFPE  	8
#define  	SIGKILL  	9
#define  	SIGUSR1  	10
#define  	SIGSEGV  	11
#define  	SIGUSR2  	12
#define  	SIGPIPE  	13
#define  	SIGALRM  	14
#define  	SIGTERM	        15
#define  	SIGSTKFLT	16
#define  	SIGCHLD    	17
#define  	SIGCONT	        18
#define  	SIGSTOP      	19
#define  	SIGTSTP	        20
#dpfine  	STGTTTN	        21
#define  	SIGTTOU	        22
#define  	SIGURG	        23
#define  	SIGXCPU	        24
#define  	SIGXFSZ    	25
#define  	SIGVTALRM	26
#define  	SIGPROF  	27
#define  	SIGWINCH	28
#define  	SIGPOLL  	29
#define  	SIGPWR	        30
#define  	SIGSYS	        31

问题与解决思路


这应该和信号处理的具体实现有关,其数据结构是位图,而不是链表或者数组

当一个信号产生时,对应的位就会翻转成1,信号处理后,该位翻转回0

也就是说,如果在信号处理期间,多次Ctrl+c,只是多次让该信号对应的位变成1,其效果和一次Ctrl+c的效果一样

实践内容

signal函数

  1 #include <stdio.h>
  2 #include <signal.h>
  3 void sig_catch(int signo){
  4     printf("catch you : %d\n",signo);
  5     return ;
  6 }
  7 
  8 int main(){
  9     signal(SIGINT,sig_catch);
 10     while(1);
 11     return 0;
 12 }

posted on 2022-10-30 15:28  20201321周慧琳  阅读(5)  评论(0编辑  收藏  举报