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

CoreDump(核心转储):
当程序运行过程中异常退出时,内核把当前程序在内存状况存储在一个 core 文件中,以便调试
执行命令 ulimit -c 如果是 0 则没有开启, 也不会生成 core dump 文件,可通过 ulimit -c unlimited 命令临时开启 core dump 功能, 只对当前终端环境有效,如果想永久生效,可修改/etc/security/limites.conf 文件,添加一行 "* soft core unlimited"默认生成的 core 文件保存在可执行文件所在的目录下,文件名为 core
如果想修改 core 文件保存路径,可通过修改内核参数: echo "/tmp/corefile-%e-%p-%t" > /proc/sys/kernel/core_pattern则文件名格式为 core-命名名-pid-时间戳
Linux 支持两种信号:
一种是标准信号,编号 1-31,称为非可靠信号(非实时),不支持队列,信号可能会丢失,比如发送多次相同的信号,进程只能收到一次,如果第一个信号没有处理完,第二个信号将会丢弃
一种是扩展信号,编号 32-64,称为可靠信号(实时),支持队列,发多少次进程就可以收到多少次
发送信号一般有两种情况:
一种是内核检测到系统事件,比如键盘输入 CTRL+C 会发送 SIGINT 信号
另一种是通过系统调用 kill 命令来向一个进程发送信号
kill命令
kill 命令发送信号给进程
参数:
-s # 信号名称
-n # 信号编号
-l # 打印编号 1-31 信号名称

建议使用kill -15 进程ID,不要使用kill -9 进程ID,因为可能会导致程序异常
trap命令
trap命令定义 shell 脚本在运行时根据接收的信号做相应的处理
命令格式:
trap [-lp] [ [ arg ] sinal_spec ... ]
-l #打印编号 1-64编号信号名称
arg #捕获信号后执行的命令或者函数
signal_spec #信号名或编号
一般捕捉信号后,做以下几个动作:
1.清除临时文件
2.忽略该信号
3.询问用户是否终止脚本执行
示例
1.按 CTRL+C 不退出循环
没有忽略CTRL+Z

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

3.调用函数,让用户选择是否终止循环

Shell-12-linux信号的更多相关文章
- Shell编程之Linux信号及信号跟踪
一.Linux信号 1.什么是信号? Linux信号是由一个整数构成的异步消息,它可以由某个进程发给其他进程,也可以在用户按下特定键发生某种异常事件时,由系统发给某个进程. 2.信号列表 [root@ ...
- shell在linux里摇摇晃晃
1.shell不只是一种解释器,还是一种编程工具 查看系统中可用的shell,linux默认使用 Bash Shell [root@localhost ~]# cat /etc/shells /bin ...
- xenomai内核解析之信号signal(一)---Linux信号机制
版权声明:本文为本文为博主原创文章,转载请注明出处.如有错误,欢迎指正.博客地址:https://www.cnblogs.com/wsg1100/ 目录 1. Linux信号 1.1注册信号处理函数 ...
- Linux信号类型说明
说明 在Linux系统开发中经常要使用到信号来实现异步通知机制.而在Linux系统中信号有很多种,也不用全部记住,学习几种常见的信号,学会使用即可:当然也要知道用哪种方式能够发送这样的信号. 查看li ...
- Linux信号基础
Linux信号基础 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux进程基础一文中已经提到,Linux以进程为单位来 ...
- Linux信号(signal) 机制分析
Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...
- 用shell实现linux系统应用文件清理工具
用shell实现linux系统文件清理工具 1:原始需求 在系统运维中,会产生大量应用备份文件.落地文件等,这些文件需要定时清理.一般来说,都是使用crontab 拉起一个脚本来清理.类似这样: 30 ...
- 非常好的一篇对linux信号(signal)的解析 (转载)【转】
转自:https://blog.csdn.net/return_cc/article/details/78845346 Linux信号(signal) 机制分析 转载至:https://www.cnb ...
- Linux 信号:signal 与 sigaction
0.Linux下查看支持的信号列表: france@Ubuntux64:~$ kill -l ) SIGHUP ) SIGINT ) SIGQUIT ) SIGILL ) SIGTRAP ) SIGA ...
- Linux信号机制
Linux信号(signal) 机制分析 [摘要]本文分析了Linux内核对于信号的实现机制和应用层的相关处理.首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理.接着分析了内核 ...
随机推荐
- Docker:如何修改Docker0网桥的默认网段
1. 背景 Docker 服务启动后默认会创建一个 docker0 网桥(其上有一个 docker0 内部接口),它在内核层连通了其他的物理或虚拟网卡,这就将所有容器和本地主机都放到同一个物理网络. ...
- Hibernate框架(五)面向对象查询语言和锁
Hibernate做了数据库中表和我们实体类的映射,使我们不必再编写sql语言了.但是有时候查询的特殊性,还是需要我们手动来写查询语句呢,Hibernate框架为了解决这个问题给我们提供了HQL(Hi ...
- SpringMvc实现批量删除,使用post传值一直报404错误
Ajax结合SpringMVC实现批量删除信息,在前台使用post向后台传递要删除的id的集合额时候,一直报404错误, 前台post传值的源码如下: 了解一下: (1)第二行的rows为前面得到的一 ...
- 比较app版本大小----python
def compare(a: str, b: str): '''比较两个版本的大小,需要按.分割后比较各个部分的大小''' lena = len(a.split('.')) # 获取版本字符串的组成部 ...
- WPF教程十:如何使用Style和Behavior在WPF中规范视觉样式
在使用WPF编写客户端代码时,我们会在VM下解耦业务逻辑,而剩下与功能无关的内容比如动画.视觉效果,布局切换等等在数量和复杂性上都超过了业务代码.而如何更好的简化这些编码,WPF设计人员使用了Styl ...
- RabbitMQ 安装与界面管理
RabbitMQ 安装与界面管理 RabbitMQ概述 官网:https://www.rabbitmq.com/ RabbitMQ是部署最广泛的开源消息代理. RabbitMQ拥有成千上万的用户,是最 ...
- 使用Nginx将请求转发至Google Analytics实现后端数据统计
前言 Google Analytics 加载缓慢是本博客在国内访问缓慢的原因之一.虽然通过使用大公司的 ga.js 的 CDN ,可以很大程度上加快加载 ga.js 文件的速度( ga.js 的更新频 ...
- Python3.7 lxml引入etree
用xml代替lxml,Python3.7中已经没有etree这个模块了 import xml.etree.ElementTree as etree from lxml import etree 这种方 ...
- 【LeetCode】974. 和可被 K 整除的子数组
974. 和可被 K 整除的子数组 知识点:数组:前缀和: 题目描述 给定一个整数数组 A,返回其中元素之和可被 K 整除的(连续.非空)子数组的数目. 示例 输入:A = [4,5,0,-2,-3, ...
- python -- 正则表达式&re模块(转载)
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...