Linux下进程管理的常用命令速查表
作者:detayun
前言
在 Linux 系统里,进程就是正在运行的程序实例。我们启动的 Nginx、MySQL、Java 服务、脚本,每一个都会产生进程。服务器运维、线上排查卡顿、端口占用、服务假死,几乎都要和进程打交道。很多新手遇到服务起不来、端口被占、CPU 内存飙升,第一步就是查看进程。本篇整理日常运维高频的进程相关命令,包含查看、筛选、终止、监控、后台任务,适合日常排查和学习。
一、进程基础概念
简单理解:程序是磁盘上的静态文件,进程是程序运行起来的动态实体。
- PID:进程ID,每个进程唯一标识,操作进程基本都靠PID
- PPID:父进程ID,进程由父进程创建
- 父进程退出后,子进程会被 systemd(老版本是init)接管,变成孤儿进程
- 僵尸进程:子进程退出,父进程没有回收它的退出状态,残留进程条目
二、查看进程
1. ps 静态查看(快照,不会实时刷新)
ps 是查看进程快照的命令,最常用两个组合:
# 查看当前终端下的进程 ps # 最常用:查看所有进程,完整信息 ps -ef # UID:用户 PID:进程ID PPID:父PID CMD:启动命令 # BSD风格,看CPU、内存占比(运维高频) ps aux
ps aux 字段说明:
- USER:进程所属用户
- PID:进程号
- %CPU:CPU使用率
- %MEM:内存使用率
- VSZ:虚拟内存
- RSS:实际占用物理内存
- TTY:终端
- STAT:进程状态
- R:运行中
- S:休眠(可唤醒)
- Z:僵尸进程
- T:停止
- START:启动时间
- TIME:累计占用CPU时间
- COMMAND:启动命令
搭配grep筛选进程(经典组合)
ps aux | grep nginx
小坑:这条命令会把grep本身这个进程也搜出来。
2. top 实时进程监控(动态刷新)
top 是服务器排查CPU、内存爆满的神器,默认3秒刷新一次
top
常用交互快捷键(进入top之后按)
- P:按CPU使用率排序
- M:按内存使用率排序
- N:按PID排序
- q:退出
- k:输入PID,直接杀死进程
- 1:展开多核CPU,查看每个核心负载
3. htop(增强版top,更友好,需要安装)
top界面简陋,很多服务器会装htop,彩色、鼠标支持,操作直观
# CentOS yum install htop # Ubuntu/Debian apt install htop htop
4. pstree 进程树,看父子关系
可以直观看到进程父子层级,排查孤儿进程、僵尸进程很好用
pstree # 同时显示PID pstree -p # 显示用户名 pstree -up
三、查找进程:pidof / pgrep
不用写grep,直接拿到PID,写脚本的时候非常方便
# pidof:根据程序名拿PID pidof nginx # pgrep:筛选进程 pgrep nginx # 同时输出用户名+PID pgrep -u root -l nginx
四、终止进程 kill / killall / pkill
提醒:杀进程优先使用温和信号,不要上来就-9强杀!
kill 是给进程发送信号,常用信号:
- 1 (SIGHUP):重新加载配置,不重启进程(很多服务支持)
- 15 (SIGTERM,默认):优雅终止,进程可以收尾、保存数据
- 9 (SIGKILL):强制杀死,无法捕获,直接干掉,容易丢数据
# 优雅停止(推荐) kill 12345 # 等价 kill -15 12345 # 强制杀死(迫不得已再用) kill -9 12345
killall:按进程名杀所有同名进程
killall nginx killall -9 nginx
pkill:和pgrep配套,按名字、用户筛选后杀进程
# 杀掉所有nginx进程 pkill nginx # 杀掉testuser用户所有进程 pkill -u testuser
五、前后台任务:&、jobs、fg、bg、nohup
写脚本、跑长时间任务必用,脱离终端运行
# &:放到后台运行,终端关闭进程也会跟着退出 python test.py & # jobs:查看当前终端后台任务 jobs # bg:把暂停的任务放到后台继续跑 bg %1 # fg:把后台任务拉回前台 fg %1
nohup:让进程脱离当前终端,关闭ssh连接也继续运行
# 标准写法,输出日志到nohup.out nohup python test.py & # 指定日志文件 nohup python test.py > run.log 2>&1 &
补充:screen / tmux 也是会话持久方案,适合交互式任务。
六、查看进程打开文件、端口 lsof / ss
很多时候我们想知道进程开了哪些端口、打开了什么文件
# 查看某个PID打开的所有文件 lsof -p 12345 # 查看占用某个端口的进程 lsof -i :80
ss(替代老旧的netstat)查看端口和进程
# 查看监听端口 ss -tulnp
七、/proc 内核进程信息
Linux一切皆文件,每个进程在 /proc/PID 下都有目录,记录进程原生信息
# 查看进程启动命令 cat /proc/12345/cmdline # 查看进程环境变量 cat /proc/12345/environ # 查看进程当前工作目录 ls -l /proc/12345/cwd
八、常见问题与实操建议
- 发现CPU占用很高:
top按P排序,定位PID,再看程序日志 - 内存持续上涨:先看
top或者htop,判断是否内存泄漏 - 端口被占用:
ss -tulnp/lsof -i:端口找到PID再处理 - 尽量优先
kill PID(15信号),-9强杀容易造成数据库、文件损坏 - 僵尸进程Z:kill 子进程无效,需要处理父进程;父进程退出后僵尸一般会被systemd回收
- nohup后台任务,不要直接ctrl+c,会终止程序
小结
- ps:静态快照,适合写脚本、筛选进程
- top / htop:实时监控CPU内存,线上排查核心工具
- pstree:查看父子进程树
- kill:发信号管理进程,15优雅、9强制
- nohup:让任务后台持久运行,断开ssh不退出
- lsof、ss:关联进程和端口、文件
进程是Linux运维里非常核心的一块,配合前面学的权限、文件查找命令,基本可以覆盖服务器大部分故障排查场景。
以上就是Linux下进程管理的常用命令速查表的详细内容,更多关于Linux进程管理命令的资料请关注脚本之家其它相关文章!
