jobs 命令详解
更新时间:2026-08-28。本文是「一个命令一个文档」系列,聚焦
jobs——它属于作业控制(Shell 内建),归类在进程管理命令族(见进程管理与调度命令族)。在交互式 shell 里跑了几个&后台任务,想知道它们现在什么状态,jobs 一眼看清。
jobs 列出当前 shell 会话里所有被它管理的后台/挂起任务,显示作业号(job ID)、状态和对应命令。
一、基本用法
bash
sleep 100 & # 用 & 把任务丢到后台,得到作业号 [1]
jobs # 列出: [1]+ Running sleep 100 &
&启动后台任务时,shell 会给它分配一个作业号(如[1]),jobs就是查看这些"自家孩子"的清单。状态常见有 Running、Stopped、Done。
二、选项:作业号与详细信息
bash
jobs -l # -l 同时显示 PID
jobs -r # -r 只看正在运行的(running)
jobs -s # -s 只看停止的(stopped,被 Ctrl-Z 挂起的)
-l把 PID 也打出来,方便你进一步 kill;-r/-s按状态过滤。作业号(%1、%2)在 fg/bg/kill 里引用,比如kill %1。
三、与 bg / fg 配合
bash
jobs # 看到 [1] Stopped vim
fg %1 # 把作业 1 拉回前台继续(见 fg /linux/cmd/fg.md)
bg %1 # 把停止的作业 1 在后台继续跑(见 bg /linux/cmd/bg.md)作业控制三件套:
jobs看清单、fg 拉前台、bg 后台继续。Ctrl-Z 把前台任务挂起变成 Stopped,再用 bg 转后台,是临时让出终端的常用手法。
四、踩坑:jobs 只在当前 shell 可见
bash
# 在终端 A 跑了 sleep 100 &,打开新终端 B 跑 jobs 是空的
# 作业是"会话绑定"的,换 shell / 断开重连就看不到,也杀不到jobs 管的是"当前 shell 的作业表",不是系统级进程表。所以脚本里、或跨终端、或断开 SSH 后,jobs 看不到之前后台的任务——那种情况要用系统级工具 ps/pgrep 按名字找。这也是为什么长期后台任务该用 nohup 或
disown。
五、实战:批量检查后台转码
bash
for f in *.mp4; do ffmpeg -i "$f" "${f%.mp4}.webm" & done
jobs -l # 一眼看到几个转码在跑、各自 PID一句话总结
jobs = 看当前 shell 的后台任务清单:显示作业号/状态/命令,-l 带 PID、-r/-s 按状态过滤;配 fg/bg 做作业控制。关键限制:作业绑定当前 shell 会话,换终端/断线就看不见——那种情况改用系统级 ps。