在 macos 终端中,使用 fg 命令可以将当前处于后台暂停(stopped)或运行中的任务调回前台。默认情况下,fg 会操作最近一次被挂起或放入后台的任务;如果系统中存在多个后台任务,可以通过指定作业编号来精确控制将哪一个任务恢复到前台继续执行。

如何查看并恢复特定的后台任务
要恢复特定的后台任务,首先需要知道该任务的作业编号(Job ID)。使用 jobs 命令可以列出当前 shell 会话中的所有后台作业及其状态。找到目标任务对应的编号后,在 fg 命令后加上该编号即可将其调回前台。例如,若列表显示作业号为 2 的任务处于停止状态,输入 fg %2 即可恢复它。

ps aux | grep python kill -STOP $(pgrep -f my_script.py) jobs fg %1
预期结果:终端输出当前运行的 Python 进程信息,发送 SIGSTOP 信号使其暂停,jobs 显示该任务为 [1]+ Stopped,随后 fg %1 将该任务带回前台,用户可重新获得终端控制权或观察其输出。
如何处理多任务环境下的作业切换
在多任务环境下,频繁使用 fg 切换任务时,建议结合 bg 和 jobs 命令进行精细管理。当某个任务被调回前台后,可以使用 Ctrl+Z 再次将其挂起并送入后台。此时,通过 jobs -l 可以查看更详细的信息,包括进程 ID。确认无误后,使用 fg % 切换到另一个需要交互的任务。这种机制允许用户在单个终端窗口中高效地管理多个交互式进程,而无需打开多个终端标签页。

sleep 100 Ctrl+Z bg %1 sleep 200 Ctrl+Z jobs fg %2
预期结果:第一个 sleep 任务被挂起并转为后台运行,第二个 sleep 任务也被挂起。通过 jobs 确认两个任务的状态后,fg %2 将第二个任务调至前台,用户可直接与其交互或等待其完成,同时第一个任务继续在后台运行。
基于 fg 命令处理中断信号的注意事项
在使用 fg 将任务调回前台时,需要注意信号的处理逻辑。如果任务是因为接收到 SIGTSTP(即 Ctrl+Z)而被挂起的,fg 会向其发送 SIGCONT 信号以恢复其运行。然而,如果任务是因为其他原因(如非法指令)而终止,fg 将无法恢复它。此外,若在前台任务运行时按下 Ctrl+C,会发送 SIGINT 信号,这通常会导致任务终止而非回到后台。因此,在恢复任务前,确保任务处于“Stopped”状态是成功调用的关键前提。











