终端中可用jobs、fg、bg管理多个作业:jobs查看当前会话中的作业列表及状态,fg将指定作业调至前台交互,bg让暂停作业在后台继续运行,三者协同实现任务灵活切换。

想在终端里一边跑下载任务,一边继续敲命令?不用新开窗口或重开终端,靠 jobs、fg 和 bg 就能灵活切换和管理多个任务。关键不是记住命令,而是理解“作业”这个概念——每个你启动的命令(无论前台还是后台)都是一个作业,Shell 会编号、标记状态,并让你随时调度。
用 jobs 查清当前有哪些作业
jobs 是所有操作的起点。它只显示当前 Shell 会话中由你启动、且还没彻底退出的作业,不包括其他终端或系统服务的进程。
- 直接输入
jobs,会列出类似[1]+ Running sleep 300 &或[2]- Stopped vim document.txt的信息;方括号里的数字是作业号,+表示默认作业(最近一个),-表示前一个; - 加
-l选项可同时显示进程 PID,方便后续用kill等工具配合; - 加
-r只看正在运行的作业,-s只看已暂停的作业,适合快速筛选; - 注意:作业一旦结束或被 kill,就会从
jobs列表中自动消失,不会残留。
用 fg 把作业拉回前台交互
fg 的作用是让某个作业重新占用终端——恢复输入输出、响应 Ctrl+C、支持键盘交互。它只对“已暂停”或“后台运行”的作业有效。
- 不带参数执行
fg,会把标记为+的那个作业(通常是最近暂停的)调到前台; - 指定作业号,比如
fg %2,就把编号为 2 的作业拉上前台; - 支持模糊匹配:
fg %curl会找命令名以curl开头的作业(只要唯一); - 如果作业原本在后台运行(如用
&启动),fg会把它变成前台任务,终端将被它独占,直到完成或再次被 Ctrl+Z 暂停。
用 bg 让暂停的作业在后台继续干活
bg 针对的是被 Ctrl+Z 暂停的作业。它不恢复终端控制权,而是让作业在后台悄悄运行,不再阻塞你输入新命令。
- 执行
bg(无参数)时,会把默认作业(+标记的那个)放到后台继续运行; - 想指定作业,写成
bg %3即可; - 注意:
bg对“已经在后台运行”的作业无效——它只作用于Stopped状态的作业; - 后台运行的作业默认不输出内容到屏幕,除非你当初启动时做了重定向(如
command > log.txt)。
典型工作流:暂停 → 查看 → 切换
实际使用中,三步组合最常用:
- 正在跑一个耗时命令(比如
tar -cf backup.tar /home),突然想干别的 → 按Ctrl+Z暂停它,提示出现[1]+ Stopped tar...; - 输入
jobs确认作业状态和编号; - 如果想让它继续但不占终端,就
bg %1;如果中途要检查进度或中断它,就fg %1拉回来。











