Linux系统基础8:进程管理命令
Linux 进程管理命令 新手超详细教程目录Linux 进程管理命令 新手超详细教程一、基础必知进程的核心属性二、查看进程状态静态快照类命令1. ps最经典的进程查看命令组合一ps aux —— BSD 风格查看所有进程详细信息举例执行与输出逐列解读组合二ps -ef —— System V 风格查看父子进程关系举例与输出解读经典用法过滤查找指定进程2. pstree树形查看进程父子关系举例3. pgrep按名字快速查找 PID举例 1查找所有 bash 进程的 PID举例 2查找 nginx 进程同时显示名字三、实时监控进程动态刷新类命令1. top系统自带的实时任务管理器界面逐行解读从上到下第 1 行系统概览第 2 行进程总数统计第 3 行CPU 整体占用第 4-5 行内存使用下方进程列表关键列top 常用快捷键新手必记2. htop更人性化的 top 升级版四、控制进程启停、终止、前后台切换1. kill给进程发信号终止、暂停等最常用的 3 种信号举例例 1正常终止 PID 为 1234 的进程例 2强制杀死 PID 为 1234 的卡死进程例 3暂停 PID 为 1234 的进程2. killall / pkill按进程名批量终止killall精确匹配进程名pkill模糊匹配进程名3. 进程的前台、后台切换必备快捷键与命令完整举例演示可以跟着操作五、进阶进程优先级调整1. nice启动进程时指定优先级举例以低优先级运行压缩命令2. renice运行中修改进程优先级举例把 PID 1234 的进程优先级调低六、实用后台常驻运行 nohup标准用法举例后台运行一个 Python 服务七、新手常见问题与避坑1. 什么是僵尸进程怎么处理2. 进程杀不死怎么办3. 能不能随便杀系统进程八、新手连贯练习流程这个单独拿出来写一下之前的文章有提到但不详细在学习命令之前我们先把最核心的概念讲透避免死记硬背。程序是存放在硬盘上的静态文件比如/bin/ls、/usr/bin/bash占磁盘空间不消耗系统资源。进程是运行起来的程序是程序的「运行实例」。它会占用内存、CPU 时间有自己的生命周期系统会给每个进程分配一个唯一的数字编号叫PID进程 ID。Linux 是多任务操作系统同一时间会有几十上百个进程在运行进程管理就是查看进程状态、监控资源占用、控制进程启停、调整运行优先级。下面按「查看 → 监控 → 控制 → 进阶」的顺序讲解每个命令都配逐成分拆解 真实输出解读 新手避坑提醒。一、基础必知进程的核心属性每个进程都有几个固定的关键属性所有命令都是围绕这些属性展开的表格属性含义说明PID进程 ID唯一数字编号从 1 开始1 号进程是系统初始化进程systemdPPID父进程 ID创建这个进程的进程的 PID所有进程的最终父进程都是 1 号进程USER所属用户启动这个进程的用户决定了进程的权限STATE进程状态运行 R、休眠 S、停止 T、僵尸 Z 等%CPU / %MEMCPU / 内存占用率进程占用的系统资源比例优先级调度优先级决定 CPU 先执行谁数值越小优先级越高二、查看进程状态静态快照类命令这类命令会输出执行瞬间的进程状态相当于给进程拍一张照片。1.ps最经典的进程查看命令ps是 Process Status 的缩写是使用频率最高的进程查看命令选项非常多新手记住两组经典组合即可。组合一ps aux—— BSD 风格查看所有进程详细信息这是最常用的写法能看到 CPU、内存占用等完整信息。语法ps aux选项拆解a显示所有用户的所有终端进程u显示详细的用户、资源占用信息x显示没有终端的后台进程守护进程举例执行与输出逐列解读ps aux典型输出只取前几行USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.0 0.2 16864 9244 ? Ss 10:00 0:01 /sbin/init root 123 0.1 1.2 125600 48768 ? Ssl 10:00 0:20 /usr/lib/systemd/systemd-journald zhangsan 456 0.0 0.3 8232 12544 pts/0 Ss 10:05 0:00 bash zhangsan 789 0.0 0.1 9876 4096 pts/0 R 10:10 0:00 ps aux每一列逐字解读列名含义新手易懂解释USER进程所属用户谁启动的这个进程PID进程 ID进程的唯一身份证号杀进程、调优先级都要用它%CPUCPU 占用率这个进程占了多少 CPU 资源%MEM内存占用率这个进程占了多少物理内存VSZ虚拟内存大小KB进程占用的虚拟内存总量参考意义不大RSS物理内存大小KB进程实际占用的物理内存这个数值最有参考价值TTY所属终端进程在哪个终端运行?代表后台守护进程和终端无关pts/0是你当前的终端STAT进程状态当前进程处于什么状态常见状态R运行中S休眠大部分进程都在休眠等待任务T被暂停 / 停止Z僵尸进程已退出但父进程没回收附加符号s会话首进程l多线程进程高优先级N低优先级前台进程组START启动时间进程什么时候启动的TIME累计 CPU 时间进程总共占用了多久 CPU不是运行时长COMMAND启动命令启动这个进程的完整命令组合二ps -ef—— System V 风格查看父子进程关系这个写法能看到 PPID父进程 ID排查进程是谁启动的非常好用。语法ps -ef选项拆解-e显示所有进程-f显示完整格式信息举例与输出解读ps -ef关键列UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:00 ? 00:00:01 /sbin/init zhangsan 456 1 0 10:05 pts/0 00:00:00 bash zhangsan 789 456 0 10:10 pts/0 00:00:00 ps -efPPID父进程 PID。比如上面ps -ef的 PPID 是 456对应 bash 进程说明 ps 命令是在 bash 终端里运行的。经典用法过滤查找指定进程配合管道符|和grep可以只看你关心的进程这是日常最常用的组合。ps aux | grep nginx逐成分拆解ps aux输出所有进程的完整列表|管道符把左边的输出传给右边当输入grep nginx从所有进程里只保留包含「nginx」关键词的行效果只显示和 nginx 相关的进程快速找到它的 PID 和资源占用。新手坑输出里一定会有一行grep nginx本身这是 grep 命令自己的进程不用管。2.pstree树形查看进程父子关系作用以树状结构展示所有进程的父子关系直观看到谁创建了谁。语法pstree [选项] [PID/用户名]常用选项-p同时显示每个进程的 PID-u显示进程所属用户举例pstree -p典型输出片段systemd(1)─┬─systemd-journal(123) ├─sshd(345)─┬─sshd(450)───bash(456)───pstree(790) │ └─sshd(500)───bash(505) └─nginx(600)───nginx(601)解读最顶层是 1 号 systemd 进程下面衍生出所有子进程nginx 有一个主进程和一个工作子进程。新手场景程序异常退出时用这个可以快速看进程还在不在、父进程是谁。3.pgrep按名字快速查找 PID作用根据进程名直接返回对应的 PID不用 grep 过滤写脚本时特别好用。语法pgrep [选项] 进程名常用选项-l同时显示进程名不只是 PID-u 用户名只找指定用户的进程举例 1查找所有 bash 进程的 PIDpgrep bash输出直接返回 PID 数字比如456、505。举例 2查找 nginx 进程同时显示名字pgrep -l nginx输出600 nginx、601 nginx左边是 PID右边是进程名。三、实时监控进程动态刷新类命令静态命令只能看一瞬间的状态要实时看 CPU、内存变化就要用动态监控工具。1.top系统自带的实时任务管理器作用相当于 Windows 的任务管理器3 秒刷新一次实时展示系统整体负载和所有进程的运行状态是排查性能问题的第一工具。语法直接输入top回车进入按q退出。界面逐行解读从上到下top - 10:30:00 up 2 days, 3:30, 2 users, load average: 0.15, 0.10, 0.08 Tasks: 78 total, 1 running, 77 sleeping, 0 stopped, 0 zombie %Cpu(s): 2.3 us, 1.1 sy, 0.0 ni, 96.2 id, 0.3 wa, 0.0 hi, 0.1 si, 0.0 st MiB Mem : 981.2 total, 720.5 free, 125.3 used, 135.4 buff/cache MiB Swap: 0.0 total, 0.0 free, 0.0 used. 810.6 avail Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME COMMAND 600 root 20 0 12560 4876 3212 S 1.3 0.5 0:20.12 nginx 123 root 20 0 125600 48768 8900 S 0.7 4.9 0:20.45 systemd-journal第 1 行系统概览top - 10:30:00 up 2 days, 3:30, 2 users, load average: 0.15, 0.10, 0.0810:30:00当前系统时间up 2 days, 3:30系统连续运行了 2 天 3 小时 30 分2 users当前有 2 个用户登录load average: 0.15, 0.10, 0.08过去 1 分钟、5 分钟、15 分钟的系统平均负载单核 CPU负载 1 代表满负荷4 核 CPU负载 4 代表满负荷负载长期超过 CPU 核心数说明系统压力大需要排查第 2 行进程总数统计Tasks: 78 total, 1 running, 77 sleeping, 0 stopped, 0 zombie总进程数、运行中、休眠、停止、僵尸进程的数量。新手关注如果僵尸进程很多说明有程序退出异常。第 3 行CPU 整体占用%Cpu(s): 2.3 us, 1.1 sy, 0.0 ni, 96.2 id, 0.3 wa, 0.0 hi, 0.1 si, 0.0 st符号全称含义ususer用户态进程占用 CPU 比例你的应用程序主要占这个sysystem内核态占用比例驱动、系统调用占这个ididleCPU 空闲比例这个数值越大CPU 越闲waIO wait等待磁盘 IO 的比例数值高说明磁盘太慢CPU 在等硬盘hi/si硬中断 / 软中断处理硬件中断、网络中断的占用第 4-5 行内存使用和free -h命令展示的信息一致分别是物理内存和交换分区的总量、已用、剩余、缓存。重点看avail Mem实际可用内存包含可以释放的缓存。下方进程列表关键列列名含义PR进程优先级数值越小优先级越高NInice 值调整优先级用的RES实际占用物理内存和 ps 的 RSS 一样S进程状态%CPU该进程的 CPU 占用率%MEM该进程的内存占用率TIME累计 CPU 使用时间COMMAND进程名top 常用快捷键新手必记进入 top 界面后直接按对应按键生效快捷键功能q退出 topP按 CPU 使用率从高到低排序最常用M按内存使用率从高到低排序1切换显示每个 CPU 核心的单独占用率k杀死进程按了之后输入 PID 回车再输入信号回车即可h查看帮助2.htop更人性化的 top 升级版top 是系统自带的但操作不够友好htop 是增强版支持鼠标操作、颜色区分、横向滚动新手更容易上手。安装默认没有需要手动安装sudo apt install htop -y启动直接输入htop回车优势底部有快捷键提示不用死记每个 CPU 核心有单独的进度条直观看到占用支持鼠标点击排序、点击进程操作可以横向滚动看完整的启动命令四、控制进程启停、终止、前后台切换1.kill给进程发信号终止、暂停等作用不是只有「杀死进程」一个功能它是给进程发送指定的信号不同信号有不同的作用最常用的是终止进程。语法kill [信号选项] PID不写信号时默认发 15 号信号。最常用的 3 种信号信号编号信号名作用场景15SIGTERM正常终止进程让程序保存数据、释放资源后优雅退出常规关闭程序默认选项9SIGKILL强制杀死进程内核直接销毁进程程序来不及做任何处理程序卡死、完全没响应的时候才用19SIGSTOP暂停进程让进程挂起之后可以恢复运行临时暂停大程序释放 CPU⚠️ 新手警告不要上来就用kill -9会导致数据丢失、文件损坏、残留临时文件。先尝试默认的 15 号信号程序真的卡死了再用 9 号。举例例 1正常终止 PID 为 1234 的进程kill 1234拆解默认发 15 号信号让程序正常退出。例 2强制杀死 PID 为 1234 的卡死进程kill -9 1234拆解-9指定 9 号强制终止信号内核直接回收进程无法抗拒。例 3暂停 PID 为 1234 的进程kill -19 1234暂停后进程还在只是不运行了用kill -18 PID可以恢复继续运行。2.killall/pkill按进程名批量终止kill必须知道 PIDkillall和pkill可以直接按进程名杀适合批量结束同名进程。killall精确匹配进程名语法killall [信号选项] 进程名举例正常终止所有 nginx 进程killall nginx注意必须完全匹配进程名少一个字母都不行。pkill模糊匹配进程名语法pkill [信号选项] 关键词举例强制杀死所有名字里带「test」的进程pkill -9 test⚠️ 新手警告模糊匹配容易误杀用之前最好先pgrep -l 关键词确认一下会匹配到哪些进程。3. 进程的前台、后台切换默认情况下你在终端输入命令运行都是前台进程会占用你的终端你没法输入其他命令必须等它结束。 我们可以把进程放到后台运行不占用终端你可以继续干别的。必备快捷键与命令操作作用命令 启动时直接放到后台运行Ctrl Z把当前前台进程挂起暂停运行放到后台jobs查看当前终端所有后台 / 挂起的任务bg 任务号把挂起的任务在后台继续运行fg 任务号把后台任务调回前台运行完整举例演示可以跟着操作启动一个前台测试进程运行一个 sleep 程序休眠 100 秒sleep 100此时终端被占用100 秒内不能干别的。挂起到后台按Ctrl Z终端会显示[1] Stopped sleep 100[1]任务号是 1Stopped已经暂停挂起查看后台任务jobs输出[1] Stopped sleep 100让它在后台继续运行bg 1输出[1] sleep 100 现在 sleep 在后台继续倒计时终端可以正常输入命令了。调回前台fg 1进程又回到前台占用终端。新手注意后台进程的输出还是会打印到终端上干扰你操作真正长期后台运行用nohup后面会讲。五、进阶进程优先级调整Linux 会根据进程优先级分配 CPU 时间优先级越高分到的 CPU 时间越多运行越流畅。优先级用nice 值表示范围是-20 ~ 19数值越小优先级越高数值越大优先级越低普通用户只能把 nice 值往高调降低优先级只有 root 才能往低调提高优先级普通进程默认 nice 值是 01.nice启动进程时指定优先级作用启动程序的时候就给它设置好 nice 值。语法nice -n nice值 命令举例以低优先级运行压缩命令nice -n 10 tar -zcvf backup.tar.gz /home/zhangsan拆解-n 10设置 nice 值为 10比默认的 0 优先级低。场景后台跑备份、压缩这种不重要的任务调低优先级不影响前台正常程序的运行。2.renice运行中修改进程优先级作用进程已经在跑了中途调整它的 nice 值。语法renice 新nice值 -p PID举例把 PID 1234 的进程优先级调低renice 15 -p 1234拆解把 PID 1234 的 nice 值改成 15优先级降低。六、实用后台常驻运行nohup日常运行脚本、服务程序时关闭终端窗口进程会被一起杀掉。nohupNo Hang Up不挂断可以让进程忽略终端关闭信号一直在后台运行直到自己结束。标准用法nohup ./your_script.sh 逐成分拆解nohup命令让进程忽略挂断信号关闭终端也不退出./your_script.sh要运行的程序 / 脚本放到后台运行不占用终端默认行为程序的所有输出会自动写入当前目录下的nohup.out文件里不会打印到终端干扰你。举例后台运行一个 Python 服务nohup python3 app.py 执行后会输出一个 PID关闭终端再重新打开用ps aux | grep app.py能看到进程还在运行。七、新手常见问题与避坑1. 什么是僵尸进程怎么处理子进程退出了但父进程没有调用 wait 回收它的资源这个已经死掉的进程就变成了僵尸进程Z 状态。僵尸进程已经不运行了不占 CPU 和内存只占一个 PID 号少量僵尸进程不影响系统。处理方法杀掉它的父进程父进程退出后系统会自动回收僵尸进程。2. 进程杀不死怎么办先确认是不是用了kill -99 号信号是内核强制销毁正常没有杀不死的用户进程。如果还是杀不死大概率是处于「D 状态不可中断休眠」一般是在等磁盘 IO等 IO 完成就会恢复或者重启系统。3. 能不能随便杀系统进程绝对不行比如 PID 1 的 systemd、内核线程杀掉会直接导致系统崩溃、重启。只杀你自己启动的、确认没用的进程。八、新手连贯练习流程可以在你的 WSL 里跟着做一遍快速掌握# 1. 后台启动一个 sleep 进程 sleep 300 # 2. 查看这个进程的 PID 和状态 ps aux | grep sleep # 3. 用 top 看它的 CPU 占用基本是 0因为在休眠 top # 按 q 退出 # 4. 用 renice 把它的优先级改成 10 renice 10 -p 刚才的PID # 5. 正常终止这个进程 kill 刚才的PID # 6. 确认进程已经消失 ps aux | grep sleep
