Linux 进程与系统命令速查
更新时间:2026-08-28。本文是 Linux 命令速查主题第③族:进程与系统管理,约 37 个命令。进程(process,正在运行的程序实例)是操作系统分配资源的基本单位,这一族命令回答的是:现在跑着什么、谁占了多少、怎么让它停下来、以及这台机器本身是什么配置。性能观测的深入工具见 性能观测与调试 与 tools/cpu。
一、查看进程
ps 给的是快照,按下快门时的那一瞬间;top/htop 给的是实时画面,会持续刷新。查"某个进程在不在、它的 PID 是多少"用 ps 或 pgrep,看"现在谁在吃 CPU"用 top。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| ps | 查看进程快照 | ps aux(BSD 风格,全部进程);ps -ef(System V 风格);ps -ef | grep nginx;ps -L -p PID(看线程);ps -o pid,ppid,%cpu,%mem,cmd -p PID(自定义列) |
| pgrep | 按名称或模式查找 PID,比 `ps | grep` 干净 |
| pidof | 按程序名取 PID | pidof nginx;pidof -s sshd(只返回一个) |
| top | 实时进程监控,系统自带的标配 | top;top -p PID(只看指定进程);进入后按 1 看每核、M 按内存排序、P 按 CPU 排序、H 切线程视图 |
| htop | top 的增强版,彩色、支持鼠标、树形展示(需安装) | htop;F5 树形、F3 搜索、F9 发信号、F2 设置显示列 |
ps aux与ps -ef输出格式略有不同但信息等价,选一个顺手的用就行。看进程树(谁启动了谁)用ps -ef --forest或pstree。判断进程状态:R运行中、S可中断睡眠(等 I/O 或信号)、D不可中断睡眠(通常是在等磁盘 I/O,这个状态杀不掉)、Z僵尸(父进程没回收)、T已停止。
二、进程控制
结束进程靠的是信号(signal,内核发给进程的一种异步通知)。最常用的是 SIGTERM(15,请求退出,进程可以清理后自己结束)和 SIGKILL(9,强制杀死,进程没机会清理)。先用 15,不行再上 9——直接 -9 可能导致数据没落盘、锁没释放。
| 命令 | 作用 | 常用示例 |
|---|---|---|
| kill | 向指定 PID 发送信号 | kill PID(默认 SIGTERM,优雅退出);kill -9 PID(SIGKILL,强制);kill -l(列出所有信号);kill -HUP PID(让守护进程重读配置) |
| pkill | 按名称或模式发信号给匹配的进程 | pkill -f "node server";pkill -u user(某用户的所有进程);pkill -HUP nginx(重载配置) |
| killall | 按程序名结束进程 | killall nginx;killall -9 java;killall -w(等待进程真正结束) |
| nice | 以指定优先级启动进程 | nice -n 10 ./job(降低优先级,让出 CPU) |
| renice | 调整运行中进程的优先级 | renice -5 -p PID(提高优先级,需 root);renice 10 -u user |
| nohup | 让进程忽略挂起信号,终端关闭后继续运行 | nohup ./server &;nohup cmd > out.log 2>&1 &(重定向输出,否则写进 nohup.out) |
| jobs | 列出当前 shell 的后台任务 | jobs -l(含 PID) |
| bg | 把暂停的任务转到后台继续运行 | Ctrl+Z 暂停后 bg %1 |
| fg | 把后台任务调回前台 | fg %1 |
| wait | 等待后台任务结束,脚本里做同步用 | wait $PID(等指定);wait(等所有) |
| timeout | 限时运行命令,超时自动结束,防止任务卡死 | timeout 10s ./task;timeout -k 5 10 cmd(10 秒后发 TERM,再 5 秒后发 KILL);timeout --signal=INT 5 cmd |
nice 的取值范围是 -20(最高优先级)到 19(最低,最"nice")。普通用户只能调低不能调高,想提优先级需要 root。后台跑长任务更稳妥的做法是用
tmux或systemd-run,见 终端复用——nohup 只能保证终端断开不挂,做不到"回来看现场"。
三、实时观察
| 命令 | 作用 | 常用示例 |
|---|---|---|
| watch | 周期性执行某命令并全屏刷新显示 | watch -n 1 free -h(每秒刷内存);watch -d(高亮变化的部分);watch -n 2 'ps aux | grep java' |
tload | 用 ASCII 图形实时显示系统平均负载曲线 | tload |
| uptime | 显示运行时长、登录用户数与 1/5/15 分钟平均负载 | uptime |
| time | 测量命令执行的耗时(real/user/sys 三项) | time ls;/usr/bin/time -v cmd(详细资源统计,需装 time 包) |
time 输出的三个值含义不同:
real是墙上时钟时间(你感受到的耗时),user是进程在用户态消耗的 CPU 时间,sys是内核态消耗的时间。多核并行时user+sys可能远大于real;反过来如果real远大于user+sys,说明大量时间在等待(I/O 或锁),而不是在计算。
四、命名空间与 cgroup
容器的底层就是 namespace(命名空间,隔离进程能看到的系统视图)和 cgroup(控制组,限制能用多少资源)。这几个命令让你直接操作这两个机制——排查容器问题、或者把某个进程塞进另一个容器的命名空间里调试,都要用到它们。
| 命令 | 作用 | 常用示例 |
|---|---|---|
unshare | 在新的命名空间里运行程序,制造隔离环境 | unshare --mount --uts --pid --fork bash(隔离挂载点与进程树);unshare --net(独立网络栈) |
nsenter | 进入指定进程所在的命名空间,常用于"进入容器但容器里没装 shell 工具" | nsenter -t PID -m -u -i -n -p(进入全部命名空间);nsenter --target PID --net ip addr(只在网络命名空间里执行命令) |
cgexec | 在指定 cgroup 中运行程序,限制其资源使用 | cgexec -g cpu,memory:mygroup ./app |
systemd-cgls | 按 cgroup 层级显示进程树,看服务/容器的资源归属 | systemd-cgls;systemd-cgtop(按 cgroup 看实时占用) |
nsenter是调试精简容器(distroless、scratch 镜像)的救命工具:这类镜像里没有bash、没有 ps,没法docker exec进去。拿容器的 PID 在宿主机上nsenter -t PID -n ss -tulpn,就能用宿主机的工具查看容器网络命名空间里的连接。容器管理见 容器与云原生。
五、系统信息
| 命令 | 作用 | 常用示例 |
|---|---|---|
| uname | 内核与系统信息 | uname -a(全部);uname -r(内核版本);uname -m(架构,x86_64/arm64) |
| hostname | 主机名 | hostname;hostname -I(本机 IP);hostname -f(FQDN) |
| who | 当前登录的用户 | who;who -b(上次启动时间);whoami(当前用户名) |
| w | 登录用户及其活动,含负载和各自在跑什么 | w;w -h(不显示表头) |
| id | 用户与组的身份信息 | id;id -u(UID,0 就是 root);id www |
| date | 显示或设置日期时间 | date;date +%Y-%m-%d;date -d yesterday;date -d @1700000000(时间戳转换) |
| cal | 日历 | cal;cal 2026;cal -3(前后三个月) |
procinfo | 显示内核与系统统计摘要(较老的工具) | procinfo;procinfo -a |
六、资源与内核
| 命令 | 作用 | 常用示例 |
|---|---|---|
lscpu | CPU 架构信息:核数、型号、缓存、NUMA 节点 | lscpu;lscpu -e(每核列表) |
| free | 内存使用概览 | free -h(人类可读);free -m(MB);注意 available 列才是真正可用的 |
| vmstat | 系统整体统计:进程、内存、swap、I/O、CPU、上下文切换 | vmstat 1(每秒刷新);vmstat 1 5(刷 5 次);vmstat -s(汇总) |
mpstat | 每核 CPU 使用率统计,看 CPU 是否均衡(sysstat 包) | mpstat -P ALL 1;mpstat -P 0 1(只看 0 号核) |
slabtop | 实时显示内核 slab 缓存占用,排查内核对象耗尽 | slabtop;slabtop -o(非交互输出一次) |
| dmesg | 内核环形缓冲区日志,看内核消息、硬件错误、OOM 记录 | dmesg | tail -50;dmesg -T(带人类可读时间);dmesg -w(实时跟踪);dmesg | grep -i oom(查 OOM 杀进程) |
lsmod | 列出已加载的内核模块 | lsmod | grep nvme |
sysctl | 查看与设置内核参数 | sysctl vm.swappiness;sysctl -a(全部);sysctl -w net.ipv4.ip_forward=1(临时生效);sysctl -p(加载配置文件) |
性能定位的标准顺序:uptime(看负载)→
vmstat 1(判断是 CPU 瓶颈还是 I/O 瓶颈)→ top(定位到进程)→mpstat -P ALL 1(看是否单核打满)→ 再用 perf 深入。被 OOM killer 杀掉的进程会在 dmesg 里留下记录,查"进程莫名消失"必看。内核参数调优见 procfs 与内核调优。
一句话总结
进程与系统速查:看进程用 ps/pgrep/top/htop,终止用 kill/pkill(先 TERM 后 KILL),后台跑用 nohup & 或 tmux,优先级用 nice/renice,看系统用 uptime/lscpu/free/vmstat/mpstat,查内核用 dmesg/sysctl,进容器调试用 nsenter——37 个命令覆盖从进程管理到系统观测的日常主干。