《Linux 进程管理:ps、top 与 kill 实战》
【摘要】 Linux 进程管理:ps、top 与 kill 实战服务卡住了、CPU 跑满了、内存被谁吃光了——第一步永远是先看进程。ps、top、kill 是排查这类问题的基本功,用熟了能省下大把时间。 一、ps:看一眼当前进程ps aux | head -20 # 最常用的全景ps aux | grep nginx # 找特定进程ps -ef --forest ...
Linux 进程管理:ps、top 与 kill 实战
服务卡住了、CPU 跑满了、内存被谁吃光了——第一步永远是先看进程。ps、top、kill 是排查这类问题的基本功,用熟了能省下大把时间。
一、ps:看一眼当前进程
ps aux | head -20 # 最常用的全景
ps aux | grep nginx # 找特定进程
ps -ef --forest # 树形看父子关系
ps aux --sort=-%cpu | head -10 # 按 CPU 占用排前十
重点看几列:%CPU、%MEM 是占用,STAT 是状态(R 运行、S 睡眠、D 不可中断睡眠、Z 僵尸),TIME 是累计 CPU 时间。TIME 很大但 CPU 不高,多半是长跑服务;CPU 持续 100% 才值得警惕。
二、top:实时盯着
top 是动态视图,默认按 CPU 排序,每 3 秒刷新:
P按 CPU 排,M按内存排,T按运行时间排k杀进程,1展开看每个 CPU 核心,q退出
更现代的替代是 htop(没装的话 sudo apt install htop),支持鼠标、横向滚动,配色也更清楚。
top -u www-data # 只看某个用户的进程
top -b -n 1 | head -20 # 批处理模式输出一次,适合写脚本抓快照
三、kill:先温柔后强硬
进程失控先别急着 -9。信号分级:
kill 1234 # 默认 TERM,让进程自己收尾
kill -TERM 1234 # 同上,显式写法
kill -INT 1234 # 模拟 Ctrl+C
kill -9 1234 # KILL,强制结束,进程没机会清理
顺序应该是:先 kill 等几秒,没反应再 kill -9。直接 -9 可能留下半写的文件、未释放的锁,下次启动反而出问题。
按名字杀用 pkill 更顺手:
pkill -f "python3 app.py" # 按命令行匹配
pkill -u testuser # 杀掉某用户全部进程(谨慎)
pgrep -af python # 先看会命中哪些,确认再杀
pkill 之前先 pgrep 核对一遍,是避免误杀的铁律。
四、僵尸进程与 D 状态
- Z(僵尸):进程已死、父进程没回收。
kill对它无效,要去找它的父进程(ps -o ppid= -p <pid>),重启父进程或让 init 接管回收。 - D(不可中断睡眠):通常在等磁盘 IO,磁盘慢或挂了会堆一堆 D 状态。杀不掉它,先查
iostat、看磁盘是不是满了或掉了。
五、日常组合拳
# 内存谁吃得最多
ps aux --sort=-%mem | head -10
# 找 CPU 最高的进程并看它在干嘛
top -b -n 1 | head -15
# 某个服务重启后还卡着,确认旧进程还在不在
pgrep -af nginx
小结
ps 是快照,top 是直播,kill 先 TERM 后 KILL。排查时先看占用、再看状态、最后再动手杀,配合 pgrep 先确认目标,基本不会误伤。僵尸进程找父进程、D 状态查磁盘,这两条记住就够了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)