Linux 进程管理入门:ps、top 与 kill 怎么用

举报
yd_254412059 发表于 2026/10/31 20:37:30 2026/10/31
【摘要】 新手向 Linux 进程管理入门:用 ps 看进程快照、用 top 实时监控负载、用 kill 按信号优雅终止进程,并给出服务器变慢时的排查流程与常见避坑点。

刚接触 Linux 时,很多人第一次打开终端就会被满屏的进程吓到:明明只开了一个程序,为什么系统里有上百个进程在跑?其实进程就是正在运行的程序的一个实例,系统启动、服务运行、你敲的每一条命令,都会产生进程。学会看进程、找进程、停进程,是 Linux 新手最实用的基本功。本文只讲三个最常用的命令:ps、top 与 kill,并给出一条新手可以直接照着用的排查流程。

一、先建立一个直观认识:什么是进程

每个进程都有一个唯一的进程号,叫 PID,还有它的父进程号 PPID。进程有自己的运行状态、占用的 CPU 和内存、启动命令。有的进程一直在前台和你交互,有的在后台默默提供服务,还有的已经结束但暂时没有被父进程回收,变成僵尸进程。管理进程的第一步不是急着杀掉它,而是先看清楚:它是谁、占了多少资源、在做什么。

二、ps:给进程拍一张快照

ps 的作用是列出某一时刻的进程快照,它本身不持续刷新。最常用的两种写法要先记住。

ps aux
ps -ef

ps aux 的输出列通常包括 USER、PID、%CPU、%MEM、VSZ、RSS、TTY、STAT、START、TIME 和 COMMAND。USER 是属主,PID 是进程号,%CPU 和 %MEM 是占用比例,STAT 是状态,例如 R 表示运行中,S 表示睡眠等待,Z 表示僵尸进程,COMMAND 是启动命令。ps -ef 则更突出 UID、PID、PPID 和完整命令行,适合顺着父子关系找问题。

新手常用的组合还有:

ps aux | grep nginx
ps aux --sort=-%cpu | head -n 15
ps -o pid,ppid,%cpu,%mem,cmd -p 1234
ps aux | grep -v grep | grep python

第一条是按名字找进程,第二条是按 CPU 占用从高到低排序并只看前十五行,第三条是只看某个 PID 的关键信息,第四条是在过滤时顺手去掉 grep 自身那一行。注意,ps aux | grep 看到进程不代表它有问题,先结合 CPU、内存和启动时间判断,再决定下一步。

三、top:实时看系统在忙什么

如果说 ps 是快照,top 就是实时监控。直接输入 top 回车,就能看到三部分信息:最上面是系统运行时间、登录用户数和平均负载;中间是任务总数与各类状态统计,以及 CPU 和内存的使用情况;下面是按资源占用排序的进程列表,默认按 CPU 排序。

在 top 界面里,常用的按键有:按 q 退出,按 M 按内存排序,按 P 按 CPU 排序,按数字 1 展开每个 CPU 核心的使用情况,按 k 再输入 PID 可以向指定进程发信号,按 h 查看帮助。需要把结果保存下来给别人看时,可以用批处理模式:

top -b -n 1 | head -n 20

这条命令只输出一次快照,不会一直停留在交互界面,适合写进排查记录或者配合脚本使用。看到 load average 偏高时,不要只盯着一个进程,也要看等待 IO 的进程多不多、内存是否接近用完、是不是有大量短命进程在反复启动。

四、kill:不是一上来就用 -9

kill 的名字听起来很暴力,但它的本质是向进程发送信号。默认不加信号时发送的是 TERM,也就是 15 号信号,意思是请进程正常退出,进程有机会保存数据、释放资源。最常见的信号还有:1 号 HUP,常用于让服务重读配置;2 号 INT,相当于按 Ctrl+C 中断;9 号 KILL,强制终止,进程无法捕获也无法做清理;15 号 TERM,优雅终止。

新手建议养成固定顺序:先确认 PID,再用默认信号试一次,等几秒看进程是否退出,确实卡死、无响应时再考虑 -9。

kill 1234
kill -15 1234
kill -9 1234
kill -HUP 1234

kill 后要复查,不要以为命令执行成功就等于进程已经消失:

ps -p 1234
ps aux | grep 1234

如果查不到,说明已经退出;如果还在,就要回到 ps 和 top 看它是不是被父进程重启了,或者是不是权限不足。另外还有 pkill 和 killall,可以按名字批量操作,但新手要格外小心:名字写得太宽泛可能误伤同名进程,生产环境尤其不要凭感觉批量杀。作业控制里还有一个写法,kill %1 表示向当前 shell 的第一个后台作业发信号,和按 PID 操作不是一回事,用之前先用 jobs 确认。

五、一条新手排查流程

假设服务器突然变慢,可以按下面这个顺序走一遍,而不是上来就重启机器。第一步用 top 看是 CPU、内存还是负载出了问题,并记下占用最高的 PID。第二步用 ps -o pid,ppid,%cpu,%mem,cmd -p 加上这个 PID,确认它到底是什么程序、是谁启动的、已经跑了多久。第三步判断它是不是你认识的服务,是不是正在做备份、编译、压测这类合理的高负载任务。第四步如果确实是失控的测试进程,先 kill 默认信号,等待后复查,仍无响应再 kill -9。第五步如果进程反复出现,说明根因在启动它的服务、定时任务或者代码逻辑,需要修配置和代码,而不是每天手动杀一次。

六、新手最容易踩的坑

第一,不要杀 PID 为 1 的进程和不认识的系统关键进程,系统可能直接出问题。第二,不要在没有确认的情况下用 kill -9 对付数据库、消息队列这类有状态服务,强制终止可能导致数据不一致。第三,普通用户只能管理自己的进程,杀别人的进程会报权限不足,这是正常保护机制,不是命令写错了。第四,僵尸进程本身不占 CPU 和内存,杀它没有用,应该去处理它的父进程。第五,看到进程名相同就认为是同一个进程是错的,一定要以 PID 为准。

七、小结与练习

记住这张最小速查表就够了:ps aux 是快照,适合找进程和排序;ps -ef 适合看父子关系;top 是实时监控,适合看整体负载和排序;kill 默认发 TERM,先优雅退出,实在不行再用 -9,并且每次都要用 ps 复查。建议你在自己的测试机上练一遍:先用 sleep 1000 & 启动一个后台进程,用 jobs 和 ps 找到它的 PID,再用 kill 结束它,最后用 ps 确认它已经消失。练熟这一步,以后遇到服务器变慢,你就不会只会重启,而是能说出是哪个进程、在做什么、为什么要停掉它。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。