Linux 进程管理入门:ps、top、kill 一次讲清
Linux 进程管理入门:ps、top、kill 一次讲清
服务器跑着跑着变慢,或者某个程序卡住不动,第一反应往往是重启。其实很多时候问题只是一个失控的进程。学会看进程、管进程,是 Linux 入门绕不开的一课。
先弄清:什么是进程
进程就是正在运行的程序。同样一个程序,跑起来之后就是一个进程,每个进程都有一个唯一的编号,叫 PID。系统启动后第一个进程是 init,之后所有进程都由它一层层派生出来,像一棵树。
进程有几种常见状态:运行中、睡眠中(等输入或等磁盘)、僵尸(已经结束但父进程还没收尸)。正常运维最常打交道的,是前两种。
ps:先看一眼谁在跑
ps 是最基础的查看命令。直接敲 ps 只能看到当前终端自己的几个进程,想看全貌要加参数:
ps aux
输出有好几列,常用的就四个:USER 是谁跑的,PID 是编号,%CPU 和 %MEM 是占用,COMMAND 是命令本身。配合 grep 可以快速定位某个程序:
ps aux | grep nginx
注意 grep 自己也会出现在结果里,多出来的一行不用理会。想看进程之间的父子关系,加一个 --forest,树形结构一目了然,找「谁拉起了谁」特别方便。
top:实时盯着资源
ps 是快照,top 是直播。敲 top 进入后,屏幕每几秒刷新一次,默认按 CPU 占用从高到低排。表头几行是系统总览:负载、任务总数、CPU 和内存使用情况。
几个常用按键要记住:按 M 改按内存排序,按 P 改回按 CPU 排序,按 k 可以直接杀进程(输入 PID 确认),按 q 退出。top 里看到的负载 load average 有三个数字,分别代表过去 1 分钟、5 分钟、15 分钟的平均负载,长期高于 CPU 核心数就说明机器真的忙。
轻量一点的替代品是 htop,彩色界面、支持鼠标和方向键,装一个用着更顺手,但服务器上不一定预装。
kill:结束进程要讲分寸
找到捣乱的进程之后,就该请它出去了。kill 后面跟 PID:
kill 1234
默认发的是 TERM 信号,意思是「请你正常退出」,程序有机会保存数据、释放资源。大多数情况下这就够了,不要一上来就用最狠的手段。
只有程序完全卡死、对 TERM 毫无反应时,才用 -9 强制结束:
kill -9 1234
-9 是 KILL 信号,系统直接收回资源,程序来不及做任何清理。数据库、写一半的文件都可能因此损坏,所以它是最后手段,不是首选。
还有一个按名字杀的 pkill,比如 pkill -f nginx,写名字比写数字方便,但名字写错会误伤,执行前先用 pgrep -f nginx 对一下 PID 列表,确认无误再动手。
实战:一次卡顿的排查顺序
服务器变卡时,可以按这个顺序走一遍:先 top 看是 CPU 还是内存被吃满,再 ps aux 找到占用最高的进程,确认它是什么程序、是谁启动的;如果是自己写的服务,先看它的日志再决定杀不杀;杀之前记下 PID 和启动命令,杀完确认服务是否按预期重启,systemctl status 看一眼状态。
有一次我的服务器 CPU 长期满载,top 排第一的是一个早就该退出的测试脚本,kill 掉之后负载立刻回落。问题不在机器配置,在一个没人管的进程。
容易踩的坑
第一,不要随便杀 root 跑的系统进程,杀错了可能直接把服务搞挂。第二,kill -9 不要当成习惯,先 TERM 再 KILL。第三,僵尸进程杀不掉,它已经死了,等父进程回收或者重启父进程才是正解,对着僵尸进程反复 kill 纯属白费力气。
小结
ps aux 看快照,top 看实时,kill 先温和后强制。进程管理没有魔法,就是先看清、再动手、留后路。把这三条命令练熟,服务器出小问题时心里就有底了。
- 点赞
- 收藏
- 关注作者
评论(0)