Linux fg 命令

Linux 命令大全 Linux 命令大全

fg 是 Linux/Unix 系统中用于进程控制的重要命令,全称为 "foreground"(前台)。它的主要功能是将后台运行的作业(job)切换到前台继续执行。

为什么需要 fg 命令

想象你正在餐厅点餐:

  1. 你点了主菜(前台进程)
  2. 同时让厨房准备甜点(后台进程)
  3. 当主菜吃完后,你可以让服务员把甜点端到面前(fg 命令)

在 Linux 中,这种前后台作业切换机制让你可以:

  • 灵活控制多个任务的执行顺序
  • 临时挂起当前任务处理更紧急的事务
  • 高效利用终端会话

基本语法

fg [作业标识]

参数说明

参数 说明
无参数 恢复最近被放入后台的作业
%n 恢复作业号为 n 的作业
%str 恢复以 str 开头的作业
%?str 恢复包含 str 的作业
%+ 或 %% 等同于无参数,恢复最近作业
%- 恢复倒数第二个被放入后台的作业

使用示例

示例 1:基本使用

  1. 启动一个长时间运行的任务并放入后台:

    sleep 60 &
    [1] 12345  # 系统返回作业号 [1] 和进程ID 12345
  2. 查看当前作业列表:

    jobs
    [1]+  运行中               sleep 60 &
  3. 将作业带回前台:

    fg %1
    # 或者简写为
    fg

示例 2:恢复特定作业

实例

# 启动多个后台作业
python script1.py &
python script2.py &

# 查看作业列表
jobs
[1]-  运行中               python script1.py &
[2]+  运行中               python script2.py &

# 恢复第一个作业
fg %1

工作原理

进程状态转换

实例

graph LR
    A[前台运行] -->|Ctrl+Z| B[暂停状态]
    B -->|fg| A
    B -->|bg| C[后台运行]
    C -->|fg| A
  1. 前台进程:占用终端,接收键盘输入
  2. 后台进程:不占用终端,无法接收输入
  3. 暂停进程:被挂起,等待恢复

信号机制

当执行 fg 时:

  1. 系统向作业发送 SIGCONT 信号(继续执行)
  2. 将作业的进程组设为终端的前台进程组
  3. 终端将输入/输出重定向到该进程

常见问题解答

Q1: 如何知道当前有哪些后台作业?

使用 jobs 命令查看:

实例

jobs -l

输出示例:

[1]- 12345 运行中        sleep 100 &
[2]+ 12346 停止         vim file.txt

Q2: fg 和 bg 有什么区别?

命令 功能 终端控制
fg 将作业带到前台 占用终端
bg 让暂停的作业在后台继续运行 不占用终端

Q3: 为什么 fg 后程序无法接收输入?

可能是程序被暂停了(显示为"已停止"),需要先发送继续信号:

实例

kill -CONT <PID>
fg %1

实际应用场景

场景 1:开发调试

>

启动开发服务器:

实例

python manage.py runserver
# 按 Ctrl+Z 暂停
[1]+  已停止               python manage.py runserver

临时执行其他命令

恢复服务器:

实例

fg

场景 2:文件编辑

实例

vim important_file.txt
# 按 Ctrl+Z 暂停编辑

# 查看文件内容
cat related_file.txt

# 返回编辑
fg

注意事项

  1. 终端关联性:后台作业与启动它的终端关联,关闭终端会终止作业
  2. 输出干扰:后台作业的输出可能突然出现在前台,干扰当前工作
  3. 权限限制:某些需要终端交互的程序(如密码输入)无法在后台运行
  4. 作业号重用:作业号在会话期间唯一,但不同终端会话独立计数

进阶技巧

结合 nohup 使用

让作业在后台持久运行(即使退出终端):

实例

nohup long_running_task &
# 之后可以重新连接并恢复
fg %1

使用 disown 解除关联

实例

python server.py &
jobs -l               # 记下作业号
disown %1             # 解除与终端的关联
# 现在可以安全关闭终端

Linux 命令大全 Linux 命令大全