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

27fedcce78b34678fff7c85fdd414278.png

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

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

f943f22a5be5a23c9db1e2aea2c0094a.png正文如下:

# Linux信号类型

信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相应的处理函数。进程可以通过三种方式来响应一个信号:1)忽略信号,即对信号不做任何处理,其中有两个信号不能忽略:SIGKILL及SIGSTOP。2)捕捉信号。3)执行缺省操作,Linux对每种信号都规定了默认操作。Linux究竟采用上述三种方式的哪一个来响应信号呢?取决于传递给响应的API函数。Linux支持的信号有:
编号信号名称缺省动作描述
1SIGHUP终止终止进程,挂起
2SIGINT终止键盘输入中断命令,一般是CTRL+C
3SIGQUITCoreDump键盘输入退出命令,一般是CTRL+\
4SIGILLCoreDump非法指令
5SIGTRAPCoreDumptrap指令发出,一般调试用
6SIGABRTCoreDumpabort(3)发出的终止信号
7SIGBUSCoreDump非法地址
8SIGFPECoreDump浮点数异常
9SIGKILL终止立即停止进程,不能捕获,不能忽略
10SIGUSR1终止用户自定义信号1,像Nginx就支持USR1信号,用于重载配置,重新打开日志
11SIGSEGVCoreDump无效内存引用
12SIGUSR2终止用户自定义信号2
13SIGPIPE终止管道不能访问
14SIGALRM终止时钟信号,alrm(2)发出的终止信号
15SIGTERM终止终止信号,进程会先关闭正在运行的任务或打开的文件再终止,有时间进程在有运行的任务而忽略此信号。不能捕捉
16SIGSTKFLT终止处理器栈错误
17SIGCHLD可忽略子进程结束时,父进程收到的信号
18SIGCONT可忽略让终止的进程继续执行
19SIGSTOP停止停止进程,不能忽略,不能捕获
20SIGSTP停止停止进程,一般是CTRL+Z
21SIGTTIN停止后台进程从终端读数据
22SIGTTOU停止后台进程从终端写数据
23SIGURG可忽略紧急数组是否到达socket
24SIGXCPUCoreDump超出CPU占用资源限制
25SIGXFSZCoreDump超出文件大小资源限制
26SIGVTALRM终止虚拟时钟信号,类似于SIGALRM,但计算的是进程占用的时间
27SIGPROF终止类似与SIGALRM,但计算的是进程占用CPU的时间
28SIGWINCH可忽略窗口大小改变发出的信号
29SIGIO终止文件描述符准备就绪,可以输入/输出操作了
30SIGPWR终止电源失败
31SIGSYSCoreDump非法系统调用
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...
ddb2bf6836e5e0832621126e711a0dee.png27ffc61c5776fe9fcfd177f1ad6ab81e.png0b6c2f44ad4d9d6d4388a1aa20ac714c.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wget 命令用法详解

wget是在Linux下开发的开放源代码的软件,作者是Hrvoje Niksic,后来被移植到包括Windows在内的各个平台上。它有以下功能和特点: (1)支持断点下传功能;这一点,也是网络蚂蚁和FlashGet当年最大的卖…

datetimepicker不可以选择当天之前_专访吴京:网上《战狼3》的消息我都不知道,大家可以选择不信...

搜狐娱乐讯 (哈麦/文)在2017爆火的《战狼2》之后,吴京演了《祖宗十九代》《流浪地球》《老师好》《银河补习班》《攀登者》《我和我的祖国》《我和我的家乡》《金刚川》八部电影,但是计划中的《战狼3》一直没有动静。不过,关于《战狼3》&…

机器人蛮王_盖伦:吊打我老婆,蛮王:我也是,他:被老婆打的不敢出塔

相遇就是缘分,你点开了我的文章,小编感到万分荣幸,感谢各位朋友。既然看到了我的文章,就说明我们还是有缘,希望大家可以帮我点点左上角的蓝色字体,小编给大家鞠躬了!LOL如此好玩的原因&#xff…

栈 详解

官方定义是这样的:栈(Stack)是一个后进先出的线性表,它要求只在表尾进行删除和插入操作。 栈是一种重要的线性结构,可以这样讲,栈是线性表的一种具体表现形式,但是它在操作上有一些特殊的要求和…

android serialport new 软件退出_基于Android9.0,了解Android启动流程

先记住四个进程和三种方式。**四个进程**1.Launcher进程2.system_server进程3.App进程4.Zygote进程**三种方式**1.Binder方式2.Socket方式3.Handler方式点击桌面APP图标,Launcher调用startActivitySafely(Launcher进程)java/*** Default laun…

Objective-C 学习笔记

超类 即父类,通过 [super setName: "a"] 可以调用超类方法 复合 是指一个对象由其他多个对象组成 对象初始化 interface Car : NSObject (Engine *engine; ) endimplementation Car - (id) init {  //因init方法可能返回不同的对象,所以需要…

【转】使用命令行方式创建和启动android模拟器

原文网址:http://blog.csdn.net/tiandinilv/article/details/8953001 1、Android模拟器介绍 Android中提供了一个模拟器来模拟ARM核的移动设备。Android的模拟器是基于QEMU开发的,QEMU是一个有名的开源虚拟机项目(详见http://bellard.org/qem…

centos7限制cpu使用_Linux系统进程CPU使用率限制脚本

一、背景近日在客户系统运维中发现,有系统在定时脚本执行期间会将Linux系统CPU利用率跑满,导致其他服务受到影响,故查阅资料发现有大神写的CPU利用率限制程序。地址:CPU Usage Limiter for Linux根据此编写脚本,配合定…

LPC1768的SPI通讯

SPI是一种全双工串行接口,可处理多个连接到指定总线上的主机和从机。在数据传输过程中总线上只能有一个主机和一个从机通信。在数据传输中,主机总是会向从机发送一帧8到16个位的数据,而从机也总会向主机发送一帧字节数据 使用代码如下 void S…

python 项目实战视频_腾讯视频 Python 爬虫项目实战

做了一些小项目,用的技术和技巧会比较散比较杂,写一个小品文记录一下,帮助熟悉。需求:经常在腾讯视频上看电影,在影片库里有一个"豆瓣好评"板块。我一般会在这个条目下面挑电影。但是电影很多,又…

Java中文乱码问题(转)

解决JSP中文乱码问题 大家在JSP的开发过程中,经常出现中文乱码的问题,可能一至困扰着大家,现把JSP开发中遇到的中文乱码的问题及解决办法写出来供大家参考。首先了解一下Java中文问题的由来: Java的内核和class文件是基于unicode的…

文本显示变量_几千个IO状态显示.十几分钟搞定实例

工程上常会在一个或者数个界面中对所有IO点监控,很多小伙伴用一一映射的传统方法来实现,在超小型项目中实用性较强,在稍微大一点的项目中实现起来效率低还经常出错。本文旨在分享有价值的实际经验,供小伙伴们参考。在实现监控前要…

贷款购房 房贷 每月还款额是如何计算出来的? 每月还款额计算步骤/方法

http://jingyan.baidu.com/m/article/0eb457e55f23fc03f1a905e5.html购房和贷款是每个普通百姓都关心的事情。贷款购房最基本的问题当然是琢磨贷款、还贷以及还贷年限与自己每月的那点“杯水车薪”收入之间的关系,怎样让它们门当户对起来,如何对着一张载…

wordl流程图怎么写字_DLG的制作流程图

1)影像自适应预处理及几何成像模型参数计算 对原始影像进行增强处理。 根据卫星影像的各种资料构建其几何成像模型。2)像控点及加密点量测 像控点的像方量测。将外业提供的控制点进行量测,点位的量测精度应尽量达到子像素级。 在卫星影像重叠和覆盖范围内量测一定数…

TabBarController创建及使用方法简介

TabBarController创建及使用方法简介 大致讲解一下TabBarController的创建过程: 首先,我们需要一些视图,如创建UIControllerView类型的view1,view2,view3. 然后,我们需要创建 一个UITabBarController类型的…

python操作sqlite3 导入csv文件_[转载]SQLite 3导入导出成txt或csv操作

平时使用官方提供的sqlite3.exe工具来操作 sqlite的数据库,可以在网上下到。进入管理:sqlite3.exe d:\\test.db //假设数据是 d:\\test.db>.databases //显示所有数据库 和 mysql的 showdatabases;>.tables //显示当前数据库的表格 和 mysql 的show tables…

android人脸识别的背景图_Android 图片人脸识别剪切

场景在开发中我们经常需要对图片以人脸为中心进行剪切并显示,这时就需要下面这个工具了。实现效果实现效果项目参考及引用项目使用将下载的jar 和 .so 文件加入到项目中。API 说明在项目中使用如下API即可:CImageView这是一个继承ImageView的图片控件&am…

华为gre隧道全部跑静态路由

最终实现: 1、pc1能用nat上网ping能pc3 2、pc1能通过gre访问pc2 3、全部用静态路由做,没有用ospf,如果要用ospf,那么两边除了路由器上跑ospf,核心交换机也得用ospf r2配置: acl number 3000 rule 5 deny…

数组与串,串的实现,KMP,BF算法

数组是一种常用的数据结构,高级语言头提供了支持数组的基本操作,而且数组也是构成其他数据结构的重要组成。 数组是N个相同元素的构成的占用一块地址连续的内存单元的有限序列。 数组的任一个元素都可以用在数组的位置来表示。 数组与线性表区别&#xf…

libsvm python_LibSVM for Python 使用

经历手写SVM的惨烈教训(还是太年轻)之后,我决定使用工具箱/第三方库PythonLibSVM是开源的SVM实现,支持C, C, Java,Python , R 和 Matlab 等, 这里选择使用Python版本。安装LibSVM将LibSVM仓库的所有内容放入…