概念篇——信号与信号集

说明
  本文章旨在总结备份、方便以后查询,由于是个人总结,如有不对,欢迎指正;另外,内容大部分来自网络、书籍、和各类手册,如若侵权请告知,马上删帖致歉。
  QQ 群 号:513683159 【相互学习】
内容来源
  《Linux系统编程》、《Linux网络编程》、《Unix环境高级编程》

一、概念:

  1️⃣信号概念
    软件中断,用于在一个或多个进程之间传递异步信号,即通知进程已发生某种情况的一种技术。
    Linux系统中定义了一系列的信号,可由内核产生,也可由系统中的其他进程产生,只要这些进程有足够的权限。
  2️⃣进程处理信号的三种选择:
    ①忽略该信号。(除SIGKILLSIGSTOP信号外)
    ②按系统默认方式处理(除0以外默认终止+core)。详细可看:Unix系统信号表
    ③捕捉信号调用回调函数。
  3️⃣键盘产生信号方式:
    ①中断键:Ctrl+CDelete
    ②退出键:Ctrl+\
  4️⃣信号集
    用于表示多个信号,数据类型:sigset_t
  5️⃣信号屏蔽字
    无法决定信号什么时候来,但可通过信号屏蔽字决定什么时候可以被响应。
    即:一个进程的信号屏蔽字规定了当前阻塞而不能递送给该进程的信号集。

二、 查看所有信号:

  Shell 命令 :kill -l, 列出所有的信号,如下所示:

xsndz@Linux:~$ kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

  0️⃣不存在编号0的信号,常称为空信号。
  1️⃣ 1) ~ 33)标准信号SIG+专用名
  2️⃣34) ~ 64)实时信号SIG+RTMIN+数字 或 SIG + RTMAX+数字
  PS:
    进程可以屏蔽掉大多数的信号,除了SIGSTOPSIGKILL
      ①SIGSTOP信号:使一个正在运行的进程暂停,
      ②SIGKILL信号:使正在运行的进程退出。
    进程可选择系统的默认方式处理信号,也可选择自己的方式处理产生的信号。
    信号之间不存在相对的优先权,系统也无法处理同时产生的多个同种的信号,也就是说,进程不能分辨它收到的是1个或者是42个SIGCONT信号。

三、信号说明:

Unix系统信号表(信号说明及默认动作)

四、相关函数函数:

【Linux】函数简介篇——信号相关函数
signal()——信号截取【man 2 signal】
kill()——将信号发送给进程/进程组【man 2 kill】
raise()——允许向进程自身发送信号【man 3 raise】
alarm()——向当前进程发送SIGALRM信号【man 2 alarm】
pause()——挂起等待信号打断【man 2 pause】
abort()——人为制造异常【man 3 abort】
【Linux】函数简介篇——信号集
sigemptyset()—— 将一个信号集的内容清空
sigfillset()——将一个信号集的置为全集
sigaddset()——在某集合中添加某个信号
sigdelset()——在某集合中删除某个信号
sigismember()——在某集合中是否存在某个信号

sigprocmask()——检测或更改其信号屏蔽字
sigpending()——取出pending集状态
sigaction() —— 检查或更改信号动作
sigsetjmp()、siglongjmp()—— 信号处理程序中进行非局部转移
sigsuspend()——等待信号

五、示例实践:

【Linux】函数示例篇——signal(附前后台切换)
【Linux】函数示例篇——alarm()与pause()
【Linux】函数示例篇——信号集相关函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值