jobs 是什么
jobs 是 shell 的作业控制命令,列出当前这个 shell 会话里的作业:用 & 放到后台的、以及用 Ctrl+Z 挂起的,都会出现在列表里。输出中的方括号编号是作业号,用来给 fg、bg、kill 指定目标;加 -l 会连进程号一起显示,这在需要跨会话处理或写脚本时是必需的。要记住作业是「当前 shell 的概念」,换一个终端就看不到已有作业。
基本信息
| 适用平台 | bash、zsh 等支持作业控制的 shell |
|---|---|
| 语法 | jobs [-l] [-p] [-r] [-s] |
| 编号含义 | 方括号里是显示编号,%1 是引用作业的写法 |
| -l | 额外显示进程号 |
| -p | 只输出进程号,方便脚本处理 |
| -r 与 -s | 分别只列运行中与已挂起的作业 |
| 局限 | 仅对当前 shell 会话有效 |
典型使用场景
- 查看当前终端里还有哪些后台任务在跑,避免误退出丢失任务。
- 取出后台任务的进程号,交给其他工具或脚本处理。
- 确认误按 Ctrl+Z 挂起的作业是否还在。
- 退出终端前清点作业,决定哪些需要脱离终端或改由复用器托管。
- 排查脚本里的后台进程为什么没有按预期结束。
常用写法
常用写法
sleep 300 & # 放到后台运行
jobs # 列出作业:[1]+ Running sleep 300 &
jobs -l # 带进程号输出
jobs -p # 只输出进程号,便于脚本取值
jobs -r # 只看运行中的作业
jobs -s # 只看已挂起的作业
kill %1 # 按作业号终止
fg %1 # 把作业调回前台
disown %1 # 从作业表移除,退出终端不再受影响符号与选项读法
| 符号或选项 | 含义 | 使用要点 |
|---|---|---|
| [1] | 显示编号 | jobs 输出里的序号,会随作业增减变化 |
| %1 | 作业引用写法 | fg、bg、kill 都接受这种写法 |
| 加号与减号 | 当前与上一个作业 | 不带参数执行 fg、bg 时默认作用于它们 |
| -l | 显示进程号 | 跨会话处理或写脚本时必须用 |
| -p | 只输出进程号 | 便于管道传递与变量赋值 |
| -r 与 -s | 运行中与已挂起 | 分类查看,排查挂起任务很方便 |
作业号会复用:一个作业结束后,新作业可能占用同一个编号。所以执行 kill %1 之前最好先 jobs 确认当前编号对应的是哪个任务。
作业是当前 shell 的概念,另一个终端的 jobs 列表是空的。跨会话管理进程必须靠进程号,或使用 systemd、会话复用器这类工具。
退出登录时后台作业会收到挂断信号并可能被终止,日志里往往没有明显提示。需要长期运行的任务要用 nohup、systemd 或终端复用器托管。