首页/系统/Linux 运维命令速查/jobs 查看后台作业
进程与作业69 条

jobs 查看后台作业

列出当前 shell 的作业(后台 & 与挂起的任务):jobs -l 带 PID、%编号 用于 fg/bg/kill。

Linux 运维命令速查系统更新于 2026-10-13

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 或终端复用器托管。

易错点

  • 在脚本或子 shell 里执行 jobs 列不到父会话的作业,误以为任务已经结束;作业控制只针对当前 shell。
  • 不核对就执行 kill %1,编号已被新作业复用,误杀了无辜任务;执行前先查看作业列表确认。
  • 依赖 shell 退出的后台任务在关闭终端后被挂断信号终止,排查时却找不到报错;长期任务要显式脱离终端。
  • 挂起的作业长期不处理会一直占着资源与端口,表现为服务无响应,实际只是进程被暂停。

数据来源与参考

  • man 1 bash(JOB CONTROL 章节)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌