0

0

如何在Linux中终止异常进程 Linux kill信号发送方法

P粉602998670

P粉602998670

发布时间:2025-08-25 10:47:01

|

1120人浏览过

|

来源于php中文网

原创

首先找到异常进程PID,用ps aux或pgrep查找;先尝试kill PID(SIGTERM)让其优雅退出;若无效则执行kill -9 PID(SIGKILL)强制终止;对于服务可优先使用systemctl stop。

如何在linux中终止异常进程 linux kill信号发送方法

在Linux系统中,当一个进程行为异常,比如占用过多资源、无响应或陷入死循环时,最直接有效的处理方式就是使用

kill
命令发送信号来终止它。通常,我们会先尝试发送一个温和的终止信号(
SIGTERM
),如果进程不响应,再使用强制终止信号(
SIGKILL
)。

解决方案

要终止一个异常进程,核心步骤是找到它的进程ID(PID),然后向它发送适当的终止信号。

首先,你需要识别出那个“不听话”的进程。我个人习惯用

ps aux | grep 进程名
或者更精确的
pgrep 进程名
来查找。
pgrep
直接返回PID,很方便。

假设你找到了进程的PID是

12345

  1. 尝试温和终止(SIGTERM): 这是默认的

    kill
    行为,也是最推荐的初次尝试。
    SIGTERM
    (信号值15)会请求进程优雅地退出,给它机会清理资源、保存数据。

    kill 12345
    # 或者明确指定信号
    kill -15 12345

    发送后,给它几秒钟时间。如果进程能够响应,它会自行退出。

  2. 强制终止(SIGKILL): 如果

    SIGTERM
    无效,进程依然顽固地挂在那里,那么就该动用
    SIGKILL
    (信号值9)了。这是一个不可被捕获、不可被忽略的信号,内核会立即终止进程,不给它任何清理的机会。这就像是直接拔电源,可能会导致数据丢失或文件损坏,所以是最后的手段。

    kill -9 12345

    这个命令几乎能杀死任何非僵尸(Zombie)进程。

通常,我的流程是:

ps aux | grep 目标进程
找到PID,然后
kill PID
,等几秒,如果还在,就
kill -9 PID

进程为什么会“异常”?识别这些问题的迹象

进程之所以会“异常”,原因真是五花八门,有时候是程序本身的bug,比如无限循环、内存泄漏;有时候是外部环境的问题,比如资源耗尽、网络不通导致I/O阻塞;还有配置错误或者与其他进程冲突等等。识别这些问题,往往需要一点侦探精神。

最常见的迹象是系统性能下降。你可能会发现CPU占用率飙高(

top
或`
htop
命令一眼就能看出来,某个进程霸占了99%甚至更高的CPU),或者内存被耗尽(
free -h
或者
top
里看
RES
VIRT
)。我遇到过最头疼的是I/O等待,进程卡在磁盘读写上,导致整个系统响应迟钝,
iostat
能帮你看磁盘I/O情况。

另外,进程状态也是个重要线索。

ps aux
输出中,
STAT
列的
D
表示不可中断睡眠(通常是I/O等待),
Z
表示僵尸进程(子进程已经退出但父进程还没回收资源)。一个进程长时间处于
D
状态,或者出现大量
Z
进程,都是异常的信号。

日志文件也是你的好朋友。程序自身的日志、系统日志(

/var/log/syslog
journalctl
)里可能会有大量的错误信息、警告,甚至直接告诉你“内存不足”或者“连接超时”。我通常会
tail -f
跟着日志看,看看有没有什么线索冒出来。

什么时候该用SIGTERM,什么时候必须用SIGKILL?

这就像是请人离开和把人轰出去的区别

SIGTERM(信号15):这是默认的

kill
命令发送的信号,也是你首先应该尝试的。它告诉进程:“嘿,老兄,你该走了。”进程收到这个信号后,有机会执行一些清理操作,比如保存未完成的工作、关闭打开的文件句柄、释放占用的内存和网络端口。这对于数据库服务、Web服务器或者任何需要保持数据完整性的应用来说至关重要。我通常会给它几秒钟到几十秒钟的响应时间,取决于应用复杂程度。如果进程能正常响应,它会干净利落地退出,不留下烂摊子。

TapNow
TapNow

新一代AI视觉创作引擎

下载

SIGKILL(信号9):当

SIGTERM
无效,进程完全无响应,或者已经陷入死锁、死循环,根本不理会任何“礼貌”的请求时,
SIGKILL
就是你的终极武器。这个信号是无法被进程捕获或忽略的,它直接由内核强制终止进程。这就像是系统直接把进程“枪毙”了,没有任何挣扎的机会。后果就是进程无法进行任何清理,数据可能丢失,文件可能损坏,或者留下一些临时文件。所以,只有在确定
SIGTERM
无效,或者情况紧急到必须立即终止时,才使用
kill -9
。我个人把它视为“核弹”,非万不得已不轻易动用。

批量管理或更高级的进程终止技巧

有时候你可能需要一次性终止多个进程,或者通过更复杂的条件来选择要终止的进程。

killall
:如果你知道进程的名字,
killall
命令非常方便。它会向所有匹配名称的进程发送信号。

killall firefox # 终止所有名为firefox的进程
killall -9 nginx # 强制终止所有nginx进程

使用

killall
时要特别小心,如果你的系统里有多个同名进程,它们都会被终止。

pkill
:比
killall
更灵活的是
pkill
。它支持更强大的模式匹配,可以根据用户名、进程组、终端等多种条件来查找并终止进程。

pkill -u someuser # 终止用户someuser的所有进程
pkill -f "java.*my_app" # 终止所有命令行中包含"java"和"my_app"的进程

pkill -f
非常有用,特别是当进程名不唯一,但其启动命令参数有特定模式时。

结合

ps
grep
xargs
:对于更复杂的筛选逻辑,你可以把
ps
grep
xargs
组合起来。

ps aux | grep "某个特定服务" | grep -v grep | awk '{print $2}' | xargs kill -9

这个命令链的含义是:列出所有进程 (

ps aux
),筛选出包含“某个特定服务”的行 (
grep
),排除掉
grep
自身的进程 (
grep -v grep
),然后只提取出进程ID (
awk '{print $2}'
),最后把这些PID作为参数传递给
kill -9
。这是一种非常强大的、自定义的批量终止方式。

systemctl stop
:如果你的异常进程是一个由systemd管理的系统服务(比如Nginx、Apache、MySQL),那么最推荐的终止方式其实是使用
systemctl stop
命令。

sudo systemctl stop nginx

这会触发systemd预定义的停止脚本,通常会比直接

kill
更优雅,因为它会执行服务关闭前的必要清理工作。只有当
systemctl stop
长时间无响应时,我才会考虑手动查找PID并使用
kill -9
。这更像是“服务管理”的范畴,但最终目标都是让进程停止。

在处理这些问题时,我总会先问自己:这个进程为什么会异常?是偶然还是必然?了解背后的原因,才能从根本上解决问题,而不是每次都手动去“杀”进程。

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

662

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

246

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

529

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

9

2026.01.16

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.3万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号