man 7 signal

信号四要素

  1. 编号 2. 名称 3. 事件 4. 默认处理动作

处理动作
Term:终止进程
Ign: 忽略信号 (默认即时对该种信号忽略操作)
Core:终止进程,生成Core文件。(查验进程死亡原因, 用于gdb调试)
Stop:停止(暂停)进程
Cont:继续运行进程

信号的处理方式:
  1. 执行默认动作
  2. 忽略(丢弃)
  3. 捕捉(调用户处理函数)

9号19号信号不能捕捉,忽略和阻塞

阻塞信号集
将某些信号加入集合,对他们设置屏蔽,当屏蔽x信号后,再收到该信号,该信号的处理将推后
未决信号集:
信号产生,未决信号集中描述该信号的位立刻翻转为1,表信号处于未决状态。当信号被处理对应位翻转回为0。

信号产生
键盘
Ctrl + c → 2) SIGINT(终止/中断) “INT” ----Interrupt
Ctrl + z → 20) SIGTSTP(暂停/停止) “T” ----Terminal 终端。
Ctrl + \ → 3) SIGQUIT(退出)
硬件异常产生信号
除0操作 → 8) SIGFPE (浮点数例外) “F” -----float 浮点数。
非法访问内存 → 11) SIGSEGV (段错误)
总线错误 → 7) SIGBUS

kill命令产生信号:kill -SIGKILL pid(SIGKILL 代号 就是 9)
kill函数:给指定进程发送指定信号
int kill(pid_t pid, int sig); 成功:0;失败:-1 (ID非法,信号非法,普通用户杀init进程等权级问题),设置errno
sig:不推荐直接使用数字,应使用宏名,因为不同操作系统信号编号可能不同,但名称一致。
pid > 0: 发送信号给指定的进程。
pid = 0: 发送信号给 与调用kill函数进程属于同一进程组的所有进程。
pid < 0: 取|pid|发给对应进程组。
pid = -1:发送给进程有权限发送的系统中所有进程。

raise abort

raise 函数:
给当前进程发送指定信号
raise(signo) == kill(getpid(), signo);
int raise(int sig); //成功:0,失败非0
abort 函数:
给自己发送异常终止信号 6) SIGABRT 信号,终止并产生core文件
void abort(void);

alarm&setitimer

定时发送14)SIGALRM信号,默认动作终止。
每个进程都有且只有唯一个定时器。

unsigned int alarm(unsigned int seconds); //返回0或剩余的秒数,无失败。

int setitimer(int which, const struct itimerval *new_value, struct itimerval *old_value); //成功:0;失败:-1,设置errno

which:
① 自然定时:ITIMER_REAL → 14)SIGLARM 计算自然时间
② 虚拟空间计时(用户空间):ITIMER_VIRTUAL → 26)SIGVTALRM 只计算进程占用cpu的时间
③ 运行时计时(用户+内核):ITIMER_PROF → 27)SIGPROF 计算cup调用时间

参考:
https://www.cnblogs.com/xiaoshiwang/p/10895795.html

C语言 signal相关推荐

  1. C语言signal()函数(通过设置一个函数(回调函数)来处理捕获到异常信号时需要执行的操作)

    文章目录 描述 声明 参数 返回值 实例 附加解释 背景知识:C语言中signal函数简介及使用 描述 C 库函数 void (*signal(int sig, void (*func)(int))) ...

  2. c语言signal函数详细说明

    c语言中singal函数详细解释说明 对于信号处理函数位于<sys/singal.h>中 void (*signal(int sig,void(*handler)(int))) (int) ...

  3. c语言 signal作用,C语言中的signal函数

    signal是一个系统调用,是一种特殊的中断,当某种特定的"软件中断"发生时,用于调用的程序.中断一般是程序执行中出现的特殊情况,如引用特殊内存中的非法地址, 浮点数被0除. si ...

  4. eval并发 shell_Shell 实现多任务并发

    实现思路 实现一个shell进程库,通过类似于init,run,wait几个简单的命令,就可以迅速实现多进程并发,伪码如下: process_init # 创建进程for city in ${citi ...

  5. CVPR2021-RSTNet:自适应Attention的“看图说话”模型

    0 写在前面 由于强大的建模能力,Transformer结构被用在一系列CV.NLP.Cross-modal的任务中.但是基于grid特征,用Transformer结构处理Image Captioni ...

  6. C语言中信号函数(signal)的使用

    先来简单谈谈C语言中的信号(signal) 首先,signal是C语言库中的函数,它实际上是软中断,也就是软件发出的终端,本质来说,类似于int n. 对于接收到该软中断信号的进程,就会停下手头的工作 ...

  7. Linux下C语言开发(信号signal处理机制)

    信号signal处理是Linux程序的一个特色,用信号处理来模拟操作系统的中断功能,对于系统程序员来说是最好的一个选择了.同样信号处理也是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概 ...

  8. 31-【go】系统信号介绍、Go语言中使用os/signal包实现对信号的处理

    一.系统信号介绍 系统信号介绍_Agoni_xiao的博客-CSDN博客 二.Go语言中使用os/signal包实现对信号的处理 Go语言中os/signal包的学习与使用 - 人艰不拆_zmc - ...

  9. C语言关于signal()函数

    函数原型 void(* signal(int sig,void(* func)(int)))(int); 指定使用sig指定的信号编号处理信号的方法. 参数func指定程序可以处理信号的三种方式之一: ...

最新文章

  1. Security Wheel 安全环
  2. Vue v-if与v-show的区别
  3. LiveVideoStack线上分享第五季(十三):高性能视频硬件编码
  4. dart系列之:你的地盘你做主,使用Extension对类进行扩展
  5. Acwing 1085. 不要62
  6. 这篇文章可以满足你80%日常工作!成功入职腾讯
  7. 【SPOJ5971】LCMSUM
  8. mysql日志监控 zabbix_zabbix日常监控项mysql(七)
  9. 2015 CCPC 这次,我为自己鼓掌
  10. nfc加密卡pm3和pm5区别_为了省门禁卡的钱,买了NFC读卡器,到底值不值
  11. 卡巴斯基7.0最新激活码
  12. PDF文件密码破解方法有几种,快来看!
  13. 计算机无法投影,电脑无法识别投影仪-电脑为什么检测不到投影仪,应该怎么安装...
  14. HDU 4093 Xavier is Learning to Count FFT + 容斥原理 2011年上海现场赛C题
  15. .c_str()函数解析
  16. notepad++ 同时搜索多个关键字
  17. 详细设计和概要设计的思考
  18. FleaPHP 学习笔记1
  19. 关于合成大西瓜的随笔
  20. 2、了解 MP-BGP EVPN 中的几种路由类型

热门文章

  1. 打开浏览器不是主页_浏览器首页被篡改!教你几个快速解决的方法
  2. 计算机名代表电脑什么,电脑开机蓝屏的各种文件名是什么意思
  3. 堆排序算法讲解视频java版_堆排序算法的讲解及Java版实现
  4. Python+django网页设计入门(17):模板语法及应用
  5. 微课|中学生可以这样学Python(例11.3):tkinter通信录管理系统4
  6. Python中的枚举类型及其用法
  7. Python+tkinter实现任意多层级关系的组合框
  8. java怎么导出有模板的表格_java用模板导出数据表格-Go语言中文社区
  9. 力扣第454题.四数相加II(JavaScript)
  10. python os write_Python 3:写入方法与os.write返回的字节数