作者:李振良OK链接:https://blog.51cto.com/lizhenliang/1899347

哈喽,各位新来的小伙伴们,大家好!由于公众号做了改版,为了保证公众号的资源能准时推送到你手里,大家记得将咱们的公众号 加星标置顶 ,在此真诚的表示感谢~

正文如下:

# Linux信号类型

信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数。进程可以通过三种方式来响应一个信号:1)忽略信号,即对信号不做任何处理,其中有两个信号不能忽略:SIGKILL及SIGSTOP。2)捕捉信号。3)执行缺省操作,Linux对每种信号都规定了默认操作。Linux究竟采用上述三种方式的哪一个来响应信号呢?取决于传递给响应的API函数。Linux支持的信号有:

编号 信号名称 缺省动作 描述
1 SIGHUP 终止 终止进程,挂起
2 SIGINT 终止 键盘输入中断命令,一般是CTRL+C
3 SIGQUIT CoreDump 键盘输入退出命令,一般是CTRL+\
4 SIGILL CoreDump 非法指令
5 SIGTRAP CoreDump trap指令发出,一般调试用
6 SIGABRT CoreDump abort(3)发出的终止信号
7 SIGBUS CoreDump 非法地址
8 SIGFPE CoreDump 浮点数异常
9 SIGKILL 终止 立即停止进程,不能捕获,不能忽略
10 SIGUSR1 终止 用户自定义信号1,像Nginx就支持USR1信号,用于重载配置,重新打开日志
11 SIGSEGV CoreDump 无效内存引用
12 SIGUSR2 终止 用户自定义信号2
13 SIGPIPE 终止 管道不能访问
14 SIGALRM 终止 时钟信号,alrm(2)发出的终止信号
15 SIGTERM 终止 终止信号,进程会先关闭正在运行的任务或打开的文件再终止,有时间进程在有运行的任务而忽略此信号。不能捕捉
16 SIGSTKFLT 终止 处理器栈错误
17 SIGCHLD 可忽略 子进程结束时,父进程收到的信号
18 SIGCONT 可忽略 让终止的进程继续执行
19 SIGSTOP 停止 停止进程,不能忽略,不能捕获
20 SIGSTP 停止 停止进程,一般是CTRL+Z
21 SIGTTIN 停止 后台进程从终端读数据
22 SIGTTOU 停止 后台进程从终端写数据
23 SIGURG 可忽略 紧急数组是否到达socket
24 SIGXCPU CoreDump 超出CPU占用资源限制
25 SIGXFSZ CoreDump 超出文件大小资源限制
26 SIGVTALRM 终止 虚拟时钟信号,类似于SIGALRM,但计算的是进程占用的时间
27 SIGPROF 终止 类似与SIGALRM,但计算的是进程占用CPU的时间
28 SIGWINCH 可忽略 窗口大小改变发出的信号
29 SIGIO 终止 文件描述符准备就绪,可以输入/输出操作了
30 SIGPWR 终止 电源失败
31 SIGSYS CoreDump 非法系统调用

CoreDump(核心转储):当程序运行过程中异常退出时,内核把当前程序在内存状况存储在一个core文件中,以便调试。Linux支持两种信号:一种是标准信号,编号1-31,称为非可靠信号(非实时),不支持队列,信号可能会丢失,比如发送多次相同的信号,进程只能收到一次,如果第一个信号没有处理完,第二个信号将会丢弃。另一种是扩展信号,编号32-64,称为可靠信号(实时),支持队列,发多少次进程就可以收到多少次。信号类型比较多,我们只要了解下,记住几个常用信号就行了,红色标记的我觉得需要记下。发送信号一般有两种情况:一种是内核检测到系统事件,比如键盘输入CTRL+C会发送SIGINT信号。另一种是通过系统调用kill命令来向一个进程发送信号。

2、kill命令

kill命令发送信号给进程。命令格式:kill [-s sigspec | -n signum | -sigspec] pid | jobspec ...kill -l [sigspec]-s  # 信号名称-n  # 信号编号-l  # 打印编号1-31信号名称示例:

给一个进程发送终止信号:kill -s SIGTERM pid或kill -n 15 pid或kill -15 pid或kill -TREM pid

3、trap命令

trap命令定义shell脚本在运行时根据接收的信号做相应的处理。命令格式:trap [-lp] [[arg] signal_spec ...]-l          #打印编号1-64编号信号名称arg         # 捕获信号后执行的命令或者函数signal_spec # 信号名或编号一般捕捉信号后,做以下几个动作:1)清除临时文件2)忽略该信号3)询问用户是否终止脚本执行示例1:按CTRL+C不退出循环

#!/bin/bashtrap "" 2    # 不指定arg就不做任何操作,后面也可以写多个信号,以空格分隔 for i in {1..10}; do   echo $i   sleep 1done# bash a.sh123^C456^C78910

示例2:循环打印数字,按CTRL+C退出,并打印退出提示

#!/bin/bashtrap "echo 'exit...';exit" 2for i in {1..10}; do   echo  $i   sleep  1done # bash test.sh123^Cexit...

示例3:让用户选择是否终止循环

#!/bin/bashtrap "func" 2func() {   read -p "Terminate theprocess? (Y/N): " input   if [ $input == "Y"] ; then        exit    fi } for i in {1..10}; do   echo $i   sleep 1done # bash a.sh123^CTerminate the process? (Y/N): Y# bash a.sh 123^CTerminate the process? (Y/N): N456...
热门推荐:
  • 牛逼!竟然纯Java打造一款SSH客户端,而且已开源~
  • 推荐一款牛逼的IDEA神器,再也不怕女同事用“烂代码”来偷袭我啦~
  • Github 2020年报告出炉了,你是那只最勤劳的章鱼猫吗?网友:我的项目star数还是0...

sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?相关推荐

  1. inputstream重新赋值之前需要close吗_变量提升真的搞懂了吗?打脸的一道题

    变量提升真的搞懂了吗?打脸的一道题 我们知道JS代码在执行之前,会做一系列的事情,其中就包括变量提升,原本以为把变量提升搞懂的我(因为这两天一直在研究变量提升,自我感觉已经很良好了,哈哈哈),拿到了一 ...

  2. sigquit信号默认忽略吗_linux下的信号列表

    我们运行如下命令,可看到Linux支持的信号列表: $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7 ...

  3. mysql slave 线程 简书_【MySQL】你真的读懂了slave status吗?

    前言:大家平时在检查主从复制的时候基本上都会使用 show slave status来看主从复制的情况,那么你真的读懂每个指标项了吗? 一.status指标解读 root@localhost [(no ...

  4. websocket没准备好如何解决_看完让你彻底搞懂Websocket原理

    偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗 ...

  5. python中str函数_一文让你彻底搞懂Python中__str__和__repr__?

    __str__和__repr__的异同? 字符串的表示形式 我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认.这就是"字符串表示形式". ...

  6. 普通类创建获取session 方式_猿蜕变11——一文搞懂mybatis花式使用方式

    看过之前的蜕变系列文章,相信你对mybatis有了初步的认识.但是这些还不够,我们今天进一步来了解下mybatis的一些用法. 猿蜕变同样是一个原创系列文章,帮助你从一个普通的小白,开始掌握一些行业内 ...

  7. 明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...

    类型别名(type alias)一个名字,是某种类型的同义词.使用类型名有很多好处,能让复杂的类型名字变得简单明了,易于理解和使用. 有两种方法可用于定义类型别名.传统的方法是使用关键字typedef ...

  8. java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...

    点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事 ...

  9. java swing如何设置jtextarea对齐方式_【爵士钢琴】一次搞懂爵士经典Swing节奏!

    摇摆(Swing)作为爵士乐初学者第一种要学习的节奏,可以说是爵士乐中最经典的一种节奏. 为什么说他很经典呢? 因为即使是简单的旋律,换个充满爵士Swing节奏的编曲也可以变得很爵士,很高级,不信你听 ...

最新文章

  1. js--webSocket入门
  2. 效率 qt_Qt开发之Go篇(三)
  3. python 调用 c 生成数组_python调用c++传递数组的实例
  4. 我的计算机怎么打不开怎么办理,我的电脑打不开,怎么办【解决方法】
  5. pytorch model.eval()的作用
  6. RabbitMQ code=200, text=Goodbye比较萌新的问题大佬绕道,乌拉~!
  7. php选择排序从大到小,PHP选择排序
  8. 一文读懂 JavaScript 和 Python 九大语义区别
  9. 压缩等级_魔兽世界:9.0会落实等级压缩吗,简单分析一下压缩等级的好处
  10. PyCharm中文指南2.0
  11. Microsoft SQL server Management Studio工具报错“应用程序的组件中发生了无法处理的异常”...
  12. hdoj1814 Peaceful Commission【2-set】
  13. web前端编程实战实例:制作静态京东首页
  14. Selenium_获取相对坐标
  15. 终于有人把DevOps讲明白了
  16. Python中定义函数的关键字是什么?一起来学习下吧
  17. 使用Cisco Packet Tracer练习无线
  18. 雅居乐第八届灰汤桃花节开幕在即 诸多亮点引爆三月
  19. MATLAB里面size什么意思,matlab中的makersize是什么意思
  20. AD PCB各层含义

热门文章

  1. 织梦DEDE网站后台如何上传附件
  2. 闪电shader_【Shader案例】怎样做出自然的闪电
  3. mysql数据库的变量有哪些_[数据库]MySQL变量
  4. rufus中gpt和mrb磁盘_计算机关于磁盘的大杂烩
  5. 【C语言进阶深度学习记录】二 有符号与无符号
  6. 2019 wannafly winter camp day5-8代码库
  7. 常用开发环境搭建配置教程(OneStall)
  8. kafka 集群的部署安装
  9. 2017-03-16 Codeforces 453A 概率期望,思维 UOJ 228(待补)
  10. nylon尼龙的来历