Linux 之 kill 命令

article/2025/10/18 19:11:01

一. kill命令简介

 

在Linux系统中,kill命令用于向运行中的进程发送信号,默认发送的信号是终止信号,会请求进程退出。kill(杀)可能会引起误解,实际上发送的信号可能与杀死进程无关。

 

我们最常使用到的kill命令为:

kill PID
kill -9 PID

前者为请求目标进程退出,后者为强制杀死目标进程。

 

1. kill PID

kill命令默认发送的信号是SIGTERM。该信号会被目标进程捕获,在收到这个信号以后目标进程可以做一些有用的操作(如保存数据),然后退出。然而,许多进程并没有专门实现处理此信号的程序,此时会调用默认的信号处理函数。而在某些情况下,有特殊处理程序的进程也会出错,无法正确处理信号。总之,SIGTERM信号不能确保目标进程能够退出。

 

SIGTERM信号的编号通常为15,可通过以下四种方式发送SIGTERM信号:

kill PID
kill -s TERM PID
kill -TERM PID
kill -15 PID

2. kill -9 PID

此时发送的是SIGKILL信号。正如前文所述,SIGTERM信号不一定能够“杀死”目标进程,在这种情况下,我们就会释放大杀器,SKGKILL信号。SIGKILL信号不会被进程所“截获”,它只能由主机系统内核处理,由其负责提供可靠的控制进程执行的方法,SIGKILL会杀死进程。

 

SIGKILL信号的编号通常为9,可通过三种方式发送SIGKILL信号:

kill -s KILL PID
kill -KILL PID
kill -9 PID

3. 其他kill信号

kill命令可以发送的信号还有很多,其它有用的信号包括HUP、TRAP、INT、SEGV及ALRM等。

 

HUP发送SIGHUP信号,SIGHUP信号的意思为挂起。在规范上,进程应当在收到这个信号时重新加载配置,相当于重启。但在实际使用中,通常只有守护进程会按照规范实施,而普通进程则是执行退出。

 

INT发送SIGINT信号,意为中断,在终端中,只需按下CTRL+C便可以产生SIGINT信号。

在终端中,CTRL+Z通常映射至SIGTSTP,CTRL+\(反斜杠)映射至SIGQUIT,这可强制程序进行核心转储。

 

二. kill能确保杀死进程吗?

答案是否定的,某些情况下即使kill -9也无法杀死进程。

 

1. 用户授权

UNIX提供了安全机制,以防止未授权用户杀死其他进程。实际上,若进程欲向另一个进程发送信号,发送信号的进程的所有者必须与接收信号的进程的所有者相同,或者发送信号的进程的所有者是超级用户root。

例如,假设当前终端的用户是dancen,则无法kill掉用户nginx启动的进程。

 

2. 超级进程

即使root用户也无法向PID为1的进程发送信号。内核初始化的最后一步就是启动init进程。这个进程是系统的第一个进程,PID为1,又叫超级进程,也叫根进程。它负责产生其他所有用户进程。所有的进程都会被挂在这个进程下,如果这个进程退出了,那么所有的进程都被kill。如果一个子进程的父进程退了,那么这个子进程会被挂到PID 1下面,即PPID为1。

 

3. 内核态进程

当一个进程执行系统调用而陷入内核代码中执行时,该进程由用户态转为内核态,处于内核态的进程将忽略所有信号处理。如果进程在执行系统调用时无限期地阻塞,则可能无法终止该进程。

 

4. 僵尸进程

进程停止后,该进程就会从进程列表中移除。但是,有时候有些进程即使执行完了也依然留在进程列表中。这些完成了生命周期但却依然留在进程列表中的进程,我们称之为 “僵尸进程”。

 

a. 僵尸进程的产生

一个进程可能会产生很多子进程。这些子进程执行完毕后会发送一个Exit信号然后死掉。这个Exit信号需要被父进程所读取。父进程随后调用wait命令来读取子进程的退出状态,并将子进程从进程列表中移除。但若父进程未能读取到子进程的Exit信号,则这个子进程不会从进程列表中删掉。

 

b. 找出僵尸进程

ps aux | grep Z

 

c. kill僵尸进程

我们可以分别通过SIGTERM信号、SIGKILL信号、SIGHUP信号来尝试kill僵尸进程。

kill PID
kill -9 PID
kill -HUP PID

如果僵尸进程没能kill掉,则可查看僵尸进程的PPID,找到父进程,令其回收子进程;如果无效,则可直接kill掉僵尸进程的父进程,父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,由init负责清理僵尸进程。

 

方法一,传递信号给父进程,命令其回收子进程的资源

kill -CHLD PPID

 

方法二,直接kill父进程,将此进程变成孤儿进程,交给init进程管理,由init进程回收此进程的资源

kill -9 PPID

 

5. 自我保护的进程

最后这一种情况是我在阿里云的服务器上遇到的。

我在执行硬盘扩展时,需要将硬盘卸载,但在执行umount命令时,提示设备忙。

 

a. 找出正在使用设备的进程

# fuser -mv /mnt/volume1/USER        PID ACCESS COMMAND
/mnt/volume1:        root     kernel mount /mnt/volume1root      10516 f.... AliYunDun

结果显示名为AliYunDun的进程占用了设备。

 

b. kill AliYunDun进程1

# kill 10516
bash: kill: (10516) - Operation not permitted# kill -9 10516
bash: kill: (10516) - Operation not permitted# sudo kill -9 10516
kill: sending signal to 10516 failed: Operation not permitted

AliYunDun是阿里云安全中心的客户端代理,为了防止被恶意kill,具有自我保护功能,我在kill该进程时,提示没有权限,并且收到了阿里云的告警:

 

c. kill AliYunDun进程2

暂时不知道AliYunDun自我保护功能的实现原理,但该进程可以通过 HUP信号kill掉。

kill -HUP 1051

 

d. 补充资料

卸载阿里云安全中心Agent官方文档:

https://help.aliyun.com/document_detail/68616.htm?spm=a2c4g.11186623.2.7.2537646azwEGcG#concept-cwf-hzc-zdb


http://chatgpt.dhexx.cn/article/F6nFie13.shtml

相关文章

TR069 ACS

TR-069是由DSL论坛(www.dslforum.org)所开发的技术规范之一,其全称为“CPE广域网管理协议”。它提供了对下一代网络中家庭网络设备进行管理配置的通用框架和协议,用于从网络侧对家庭网络中的网关、路由器、机顶盒等设备进行远程集…

tr069 Cpe ACS 模拟器

完美支持tr069报文调试,支持反向链接,0 /1/2/4/等事件,支持信令,支持流程组合,支持PNP,告警等 文件下有config.ini,修改相关配置即可使用 支持批量开站心跳等. 版本历史: 1.0 增加业务网管开站 增加初始网管开站 1.1 优化 1.2 支持CWMP-ID 1.3 增加位置绑定 1.3…

基于TR069协议管理平台(XACS)多场景解决方案之一《TR069测试平台》

TR069测试平台(XACS) 为CPE设备TR069协议开发优化的版本,支持TR069协议基本操作,并可跟踪报文交互,适用于协议功能测试 1. TR069基本操作 支持TR069规范基本操作,GetRPCMethods, GetParameterValues, SetParameterValues, GetPar…

TR069相关问题

TR069相关问题 1.出现tr069客户端不稳定现象2.上传配置不成功3.浏览器不兼容4.上报给网管的报文被拦截5.网管问题6.升级失败 1.出现tr069客户端不稳定现象 网管下发了某些设置命令或者设置wan连接重新启用了cwmpd进程 2.上传配置不成功 command_key值没有对应,赋…

TR069协议向导——一个帮助你了解TR069协议的简明教程(一)【转】

(转自:https://blog.csdn.net/dreamcode/article/details/3864715) 1.为什么需要TR069 随着VoIP、IPTV等越来越多IP终端设备的普及(尤其在家庭中的普及),大量设备的配置和维护变得越来越困难&#xff0…

使用电信 TR069 内网架设 WireGuard 隧道异地组网

❝ 本文转自 Steins;Gate,原文:https://www.kryii.com/89.html,版权归原作者所有。欢迎投稿,投稿请添加微信好友:cloud-native-yang TR069 内网是运营商用于下发光猫管理网络的内网,同一运营商同一省份的内…

博通Broadcom SDK源码学习与开发12终结篇——TR069网管协议

声明:原创作品,严禁用于商业目的。 本系列文章将全面剖析以Bcm33xxx芯片开发Cablemodem产品的SDK源码为例,从编译系统到各个功能模块进行分析与探讨。 文章目录 0.写在前篇1. TR069的Makefile和源码2. 配置参数2.1 CLI命令2.2 CM ConfigFile…

TR069协议与商业应用1——概述(带目录索引)

声明:原创作品,严禁用于商业目的。 如有任何技术问题,欢迎和我交流:19826269205(微信同号)。 学习链接 免费学习 文章目录 1. 概述1.1 引言1. 2 TR069协议规范1.3 Easycwmp介绍1.4 TR069协议服务端测试工具…

TR069协议与商业应用4——TR069服务器测试工具

声明:原创作品,严禁用于商业目的。 如有任何技术问题,欢迎和我交流:19826269205(微信同号)。 腾讯课堂链接 B站免费视频部分 文章目录 1. openACS2. VigorACS3. XACS3.1 概述3.2. 设备接入3.3 管理端登录…

TR069-STUN

该模块依据TR-111实现STUN Server功能,基站设备(CPE)作为STUN Client,向STUN Server发送BINDING-REQUEST,CPE通过BINDING-RESPONSE响应消息获取设备是否在NAT之后,以及NAT类型。 如果设备在NAT之后&#xf…

TR069 测试

对于需要测试TR069的用户,可以使用一个免费的测试平台。 测试方法可以参考下面的流程: TR069智能云平台提供了完全免费的终端自动配置系统. 1.首先登录到http://39.106.195.193:9090/acscloud 注册您的用户 2.注册成功后,在您的设备端配置ACS…

TR069协议与商业应用5——TR069协议架构设计

声明:原创作品,严禁用于商业目的。 如有任何技术问题,欢迎和我交流:19826269205(微信同号)。 腾讯课堂链接 B站免费视频部分 文章目录 1. TR069(CWMP)程序设计思想2. 架构分析3. T…

TR069协议

TR069( Technical Report 069)全称是“ CPE广域网管理协议(CWMP),用于远程终端管理,是 CPE 和 ACS之间沟通的通讯协定。CPE 可以借着这个协定完成服务开通、功能设定、档案上传下载、系统检测 等等初始化及…

TR069浅析

何为TR069? TR069, 全称“Technical Report 069”是由DSL Forum修订的一份技术规范,该规范是应用层的管理协议,命名为“CPE广域网管理协议”。 TR069定义了一套全新的网管体系结构,包括管理模型,交互接口及基本的管理…

TR069

tr069简介 全称是“用户终端设备广域网管理协议(CWMP) 用于远程终端管理,比如远程的配置阿什么的(对远程的设备进行配置等管理) 1. TR069协议网络架构 ACS为自动配置服务器,负责对终端设备CPE进行管理…

CWMP协议(TR069协议)学习

文中借鉴了一些大神的整理,后面会贴上链接,如侵删 目录 一、概念(来自百度百科) 二、网络元素 三、基本功能 四、CWMP协议栈 五、远程调用方法(RPC)详细的RPC方法定义请参见TR-069 六、inform的事件…

TR069是什么鬼

一,TR069是什么 1,概念 搞嵌入式或通信设备的,或多或少都会听说TR069。那他是什么鬼? TR069,就是CPE广域网管理协议。 它用于ACS和CPE之间的自动协商交互,能够实现终端的自动配置。( ACS&#x…

TR069协议详解

一、关于TR069协议 TR069, 全称“Technical Report 069”是由DSL Forum(一个非盈利性的全球行业联盟,致力于发展宽带网络范, 其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商,现已更名为“Broadband Forum”)修…

TR-069协议介绍

一、概念 关于TR-069 ①协议命名 TR-069, 全称“Technical Report 069”是由DSL Forum(一个非盈利性的全球行业联盟,致力于发展宽带网络范)。其成员包括通讯、设备、计算机、网络和服务提供商等行业的领先厂商,现已更名为“Broadband Forum…

apache多个php版本fcgi,apache使用mod_proxy_fcgi实现多版本php共存

2019-08-02 apache使用mod_proxy_fcgi实现多版本php共存 首先配置php 安装你想用的php版本,找到你的php-fpm.conf配置文件 将listen换成你想要的端口 比如listen 127.0.0.1:9099 注意,如果你的fpm系变量配置文件在php-fpm.d的www.conf下面,请…