当前位置:网站首页>Shell脚本--信号发送与捕捉
Shell脚本--信号发送与捕捉
2022-08-03 05:28:00 【念舒_C.ying】
信号(Signal):信号是在软件层次上对中断机制的一种模拟,通过给一个进程发送信号,执行相
应的处理函数。
进程可以通过三种方式来响应一个信号:
忽略信号,即对信号不做任何处理,其中有两个信号不能忽略:SIGKILL 及 SIGSTOP。
捕捉信号,修改捕捉到的信号的缺省操作。
执行缺省操作,Linux 对每种信号都规定了默认操作。
Linux 究竟采用上述三种方式的哪一个来响应信号呢?取决于传递给响应的 API 函数。


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 sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
-s # 信号名称
-n # 信号编号
-l # 打印编号 1-31 信号名称
给一个进程发送终止信号:
kill -s SIGTERM pid
或
kill -n 15 pid
或
kill -15 pid
或
kill -TREM pid
trap 命令
格式:trap [-lp] [[arg] signal_spec ...]
trap 命令定义 shell 脚本在运行时根据接收的信号做相应的处理。
-l # 打印编号 1-64 编号信号名称
arg # 捕获信号后执行的命令或者函数
signal_spec # 信号名或编号
一般捕捉信号后,做以下几个动作:
清除临时文件
忽略该信号
询问用户是否终止脚本执行
trap '触发指令' 信号
忽略信号的操作
trap '' 信号
恢复原信号的操作
trap '-' 信号
列出自定义信号操作
trap -p
当脚本退出时,执行finish函数
trap finish EXIT
示例 :循环打印数字,按 CTRL+C 退出,并打印退出提示
#!/bin/bash
trap "echo 'exit...';exit" 2
for i in {1..10}; do
echo $i
sleep 1
done
边栏推荐
- ZBrush+Substance制作蜥蜴巫婆医生!
- 在Zabbix5.4上使用ODBC监控Oracle数据库
- 3d建模师为什么不建议入行
- 【EA Price strategy OC1】以实时价格为依据的EA,首月翻仓!】
- mib browser无法接收snmp trap消息解决
- 大佬!Maya+ZBrush+Substance制作泰坦野兽全流程!
- 3. What is the difference between final, finally, and finalize?
- Makefile.am:24: error: Libtool library used but ‘LIBTOOL‘ is undefined
- 域名注册流程:如何选择购买合适的域名?
- 零代码工具拖拽流程图
猜你喜欢
随机推荐
2021-06-20
SSL证书过期后怎么办?
界面仅允许扫码枪录入禁止手工键盘输入
Redis哨兵模式+过期策略、淘汰策略、读写策略
Podman can learn in one piece
一根网线完美解决IPTV+千兆网复用,还不来试试
笛卡尔积处理商品属性sku
ARP协议及简单路由器原理(1)
2021-06-15
Nvidia NX使用向日葵远程桌面遇到的问题
JumpServer如何传输文件以及复制剪切板
你真的了解volatile关键字吗?
【应届生租房】应届生如何租房以及注意事项
Migration of BOA Server
域名注册流程:如何选择购买合适的域名?
DNS常见资源记录类型详解
ue4学习日记3(设置操控角色,地形)
使用Blender和ZBrush制作武器模型
3D建模:做什么副业在家就能月入1W?
VLAN虚拟局域网技术









