sigquit信号默认忽略吗_老妹儿,你真的搞懂了 Shell 信号吗?
作者:李振良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 信号吗?相关推荐
- inputstream重新赋值之前需要close吗_变量提升真的搞懂了吗?打脸的一道题
变量提升真的搞懂了吗?打脸的一道题 我们知道JS代码在执行之前,会做一系列的事情,其中就包括变量提升,原本以为把变量提升搞懂的我(因为这两天一直在研究变量提升,自我感觉已经很良好了,哈哈哈),拿到了一 ...
- sigquit信号默认忽略吗_linux下的信号列表
我们运行如下命令,可看到Linux支持的信号列表: $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7 ...
- mysql slave 线程 简书_【MySQL】你真的读懂了slave status吗?
前言:大家平时在检查主从复制的时候基本上都会使用 show slave status来看主从复制的情况,那么你真的读懂每个指标项了吗? 一.status指标解读 root@localhost [(no ...
- websocket没准备好如何解决_看完让你彻底搞懂Websocket原理
偶然在知乎上看到一篇回帖,瞬间觉得之前看的那么多资料都不及这一篇回帖让我对 websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗 ...
- python中str函数_一文让你彻底搞懂Python中__str__和__repr__?
__str__和__repr__的异同? 字符串的表示形式 我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认.这就是"字符串表示形式". ...
- 普通类创建获取session 方式_猿蜕变11——一文搞懂mybatis花式使用方式
看过之前的蜕变系列文章,相信你对mybatis有了初步的认识.但是这些还不够,我们今天进一步来了解下mybatis的一些用法. 猿蜕变同样是一个原创系列文章,帮助你从一个普通的小白,开始掌握一些行业内 ...
- 明显调用的表达式前的括号必须具有指针函数类型_每天三分钟带你搞懂C++基础Day5 处理类型 typedef、auto、decltype...
类型别名(type alias)一个名字,是某种类型的同义词.使用类型名有很多好处,能让复杂的类型名字变得简单明了,易于理解和使用. 有两种方法可用于定义类型别名.传统的方法是使用关键字typedef ...
- java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...
点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事 ...
- java swing如何设置jtextarea对齐方式_【爵士钢琴】一次搞懂爵士经典Swing节奏!
摇摆(Swing)作为爵士乐初学者第一种要学习的节奏,可以说是爵士乐中最经典的一种节奏. 为什么说他很经典呢? 因为即使是简单的旋律,换个充满爵士Swing节奏的编曲也可以变得很爵士,很高级,不信你听 ...
最新文章
- js--webSocket入门
- 效率 qt_Qt开发之Go篇(三)
- python 调用 c 生成数组_python调用c++传递数组的实例
- 我的计算机怎么打不开怎么办理,我的电脑打不开,怎么办【解决方法】
- pytorch model.eval()的作用
- RabbitMQ code=200, text=Goodbye比较萌新的问题大佬绕道,乌拉~!
- php选择排序从大到小,PHP选择排序
- 一文读懂 JavaScript 和 Python 九大语义区别
- 压缩等级_魔兽世界:9.0会落实等级压缩吗,简单分析一下压缩等级的好处
- PyCharm中文指南2.0
- Microsoft SQL server Management Studio工具报错“应用程序的组件中发生了无法处理的异常”...
- hdoj1814 Peaceful Commission【2-set】
- web前端编程实战实例:制作静态京东首页
- Selenium_获取相对坐标
- 终于有人把DevOps讲明白了
- Python中定义函数的关键字是什么?一起来学习下吧
- 使用Cisco Packet Tracer练习无线
- 雅居乐第八届灰汤桃花节开幕在即 诸多亮点引爆三月
- MATLAB里面size什么意思,matlab中的makersize是什么意思
- AD PCB各层含义
热门文章
- 织梦DEDE网站后台如何上传附件
- 闪电shader_【Shader案例】怎样做出自然的闪电
- mysql数据库的变量有哪些_[数据库]MySQL变量
- rufus中gpt和mrb磁盘_计算机关于磁盘的大杂烩
- 【C语言进阶深度学习记录】二 有符号与无符号
- 2019 wannafly winter camp day5-8代码库
- 常用开发环境搭建配置教程(OneStall)
- kafka 集群的部署安装
- 2017-03-16 Codeforces 453A 概率期望,思维 UOJ 228(待补)
- nylon尼龙的来历