kill信号的使用

本文介绍了Bash shell中的kill命令及其常用信号。kill命令用于发送信号给进程以实现进程控制,如终止或暂停进程。文章详细解释了如何使用kill命令,并列举了一些重要的信号,如SIGTERM和SIGKILL的作用。
kill信号的使用

多数现代的shell,包括Bash,有一个内建的 kill 函数。在Bash里,信号名和数字都可以被接受为选项,选项可以是作业名或者进程号。使用 -l选项使得一个退出状态可以被报告:0是至少被成功发送的一个信号,有错误发生的话就是非零。

/usr/bin 使用 kill 命令,你的系统可能开启了额外选项,比如以不同于你的ID的用户或者执行进程的名字来杀死进程,同使用 pgreppkill 一样。

Both kill commands send the TERM signal if none is given.

下表所列是最常用的信号:

表12.2.常用的kill信号

信号名信号量效果
SIGHUP1挂起
SIGINT2从键盘中断
SIGKILL9杀死信号
SIGTERM15中止信号
SIGSTOP17,19,23停止进程
[注意]SIGKILL 和 SIGSTOP

SIGKILLSIGSTOP 可以被捕获,阻止和忽略。

当杀死一个或者一系列进程,通常先尝试最小危险的信号 SIGTERM。那样,关心按次序关机的程序得到设计来执行当收到类似清理关闭打开文件的 SIGTERM 信号。如果你向一个进程发送一个 SIGKILL 信号,你就把进程在关闭前进行清理工作的机会给剥夺了,可能造成意想不到的后果。

但是如果一个清理终止没有起作用,那么 INT 或者 KILL 信号可能是唯一的选择。比如,当一个进程不是使用 Ctrl+C中止的话,最好使用kill -9加上进程号。

当一个进程启动了几个实例, killall 可能更方便。它使用和kill同样的选项,只不过对进程的所有实例起作用。在正式环境使用之前测试这个命令,即便它可能不能像期望的那样在某些商业用途

### 关于 PSU 和 Kill 信号使用方法 #### 杀死进程 (Kill Signal) 的基本概念 在操作系统层面,`kill` 是一种用于向进程发送信号的标准机制。尽管 `kill` 这一术语可能让人联想到终止进程的行为,但实际上它也可以用来传递其他类型的信号给目标进程,比如暂停 (`SIGSTOP`)、继续运行 (`SIGCONT`) 或者请求程序优雅退出 (`SIGTERM`)。 当讨论 PSU(Power Supply Unit)与杀进程信号之间的关系时,需明确这里的 PSU 是否指代硬件设备还是某种软件组件(如 Oracle PSU)。如果是前者,则涉及的是物理层面上的操作;而后者则是基于应用程序逻辑的设计。 #### 对于硬件 PSU 的情况 假设此处所提及的 PSU 实际是指计算机中的电源供应器,在正常情况下,这类实体不具备直接响应来自操作系统的 kill 信号的能力,因为它们主要依赖 BIOS/UEFI 设置以及特定控制协议来实现功能调节。然而,某些高级管理系统可能会提供间接手段去操控连接至 PSU 的电能分配状况: - **通过 ACPI 接口**:现代主板利用 Advanced Configuration and Power Interface(ACPI)[^3] 协议来进行功耗管理和唤醒策略设定。理论上讲,假如存在某个后台服务负责监控这些活动,并且该服务本身能够被 kill 信号中断的话,那么这或许会影响整个系统的能源供给模式切换过程。 - **借助 IPMI/BMC 功能**:Intelligent Platform Management Interface(IPMI)[^4] 提供了一种标准化的方法访问服务器内部健康数据并实施远程维护动作。部分高端型号 PSU 可能集成了支持此标准的功能模块,允许管理员经由网络下达命令改变其工作参数甚至强制断开供电线路——不过这种情况下的“关闭”并非传统意义上的杀死进程那么简单粗暴,而是经过精心设计的安全流程的一部分。 #### 针对软件性质 PSU (例如 Oracle Patch Set Update) 如果这里所说的 PSU 特定指向像 Oracle 数据库那样的补丁集合产品,则完全属于另一范畴内的事务了。在这种环境下,“killing”一个正在进行更新作业的服务实例意味着立即停止当前任务序列执行路径上的任何进一步尝试直到人为干预恢复为止。具体做法如下所示: ```bash # 查找正在运行的目标进程ID(PID),假定名称为'oracle_psu' ps aux | grep oracle_psu # 发送 SIGKILL 给指定PID号以强行结束之 kill -9 <PID> ``` 值得注意的是,采用上述方式处理问题往往伴随着风险成本考量因素在里面 – 不仅可能导致未完成的数据修改丢失掉,还极有可能破坏数据库结构完整性从而引发更严重的后果。因此建议尽可能遵循官方文档推荐的最佳实践指南行事,即先尝试平缓的方式让应用自行清理资源再退出: ```bash # 尝试发送 SIGHUP 让守护进程有机会自我修复错误条件后再决定下一步行动方向 kill -HUP <PID> ``` 另外需要注意一点就是关于异常捕获机制的重要性强调一遍也不过分。无论何时何地都应该提前考虑到可能出现的各种意外情形并且制定相应的应急预案措施加以应对。例如设置 trap handler 函数监听关键事件的发生以便及时作出反应调整计划安排等等[^5]: ```bash #!/bin/bash function cleanup { echo "Caught signal! Performing necessary cleanups..." # Add your custom logic here to ensure proper shutdown procedures are followed. } trap 'cleanup; exit 0' INT TERM EXIT while true; do sleep 60 & wait $! done ``` 以上脚本片段展示了如何定义一个简单的陷阱处理器函数用作捕捉到来自外部源发起的不同种类终端请求的同时还能保证最后阶段妥善处置遗留下来的松散末端链接等问题的存在可能性考虑进去。 --- ### 相关问题
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值