fg命令 #
fg
命令(foreground)用于将后台作业带到前台运行。它是shell内置命令,是作业控制功能的一部分。
语法 #
fg [作业ID...]
作业ID #
作业ID可以使用以下格式指定:
格式 | 描述 |
---|---|
%n |
作业号为n的作业 |
%str |
命令以str开头的作业 |
%?str |
命令包含str的作业 |
%% 或 %+ |
当前作业(最近放入后台或停止的作业) |
%- |
上一个作业(当前作业之前的作业) |
如果不指定作业ID,fg
命令默认操作当前作业(%+
或%%
)。
常见用法 #
1. 将当前后台作业带到前台 #
fg
2. 将特定作业带到前台 #
fg %1
3. 将命令以特定字符串开头的作业带到前台 #
fg %find
这会将命令以"find"开头的作业带到前台。
4. 将包含特定字符串的作业带到前台 #
fg %?txt
这会将命令包含"txt"的作业带到前台。
作业控制流程 #
典型的作业控制流程如下:
- 启动一个命令在后台运行(使用
&
操作符) - 使用
jobs
命令查看作业状态 - 使用
fg
命令将后台作业带到前台 - 如果需要,按下
Ctrl+Z
暂停该作业 - 使用
bg
命令将其重新放到后台运行
实用示例 #
1. 启动后台作业并带到前台 #
# 在后台启动一个命令
sleep 100 &
[1] 1234
# 查看作业
jobs
[1]+ Running sleep 100 &
# 将其带到前台
fg %1
sleep 100
2. 管理多个后台作业 #
# 在后台启动多个命令
sleep 100 &
[1] 1234
sleep 200 &
[2] 5678
sleep 300 &
[3] 9012
# 查看作业
jobs
[1] Running sleep 100 &
[2]- Running sleep 200 &
[3]+ Running sleep 300 &
# 将第一个作业带到前台
fg %1
sleep 100
# 按Ctrl+Z暂停
[1]+ Stopped sleep 100
# 将第二个作业带到前台
fg %2
sleep 200
3. 在前台和后台之间切换作业 #
# 在后台启动一个命令
find / -name "*.txt" > results.txt &
[1] 1234
# 将其带到前台
fg
find / -name "*.txt" > results.txt
# 按Ctrl+Z暂停
[1]+ Stopped find / -name "*.txt" > results.txt
# 将其放回后台运行
bg
[1]+ find / -name "*.txt" > results.txt &
# 再次将其带到前台
fg
find / -name "*.txt" > results.txt
4. 使用作业名称引用作业 #
# 在后台启动一个命令
find / -name "*.txt" > results.txt &
[1] 1234
# 使用命令开头引用作业
fg %find
find / -name "*.txt" > results.txt
5. 在前台编辑文件,暂停,然后恢复 #
# 启动编辑器
vim file.txt
# 按Ctrl+Z暂停
[1]+ Stopped vim file.txt
# 执行其他命令
ls -la
# 恢复编辑
fg
vim file.txt
与其他命令的关系 #
fg
命令通常与以下命令一起使用:
jobs
:列出当前shell会话中的作业bg
:将已停止的作业放到后台运行Ctrl+Z
:暂停当前前台作业&
(命令后缀):在后台启动命令kill
:向作业发送信号(如终止信号)wait
:等待后台作业完成disown
:从当前shell的作业表中移除作业
注意事项 #
-
fg
命令只能操作当前shell会话中的作业,不能操作其他终端或会话中的作业。 -
当一个作业被带到前台后,它会接收终端的输入和信号。例如,按下
Ctrl+C
会向前台作业发送中断信号。 -
如果前台作业需要用户输入,它会等待用户输入。如果没有用户输入,它可能会一直等待。
-
在某些shell中,
fg
命令可能不可用或行为不同。 -
当shell会话终止时,所有作业(包括后台作业)通常也会终止,除非使用
nohup
或disown
命令。
提示 #
- 使用
jobs
命令可以查看当前shell会话中的所有作业 - 使用
fg
命令不带参数时,它会操作当前作业(通常是最近的后台作业) - 使用
fg %n
可以指定要带到前台的作业号 - 使用
fg %-
可以带回上一个作业 - 在前台作业运行时,可以使用
Ctrl+C
终止它,或使用Ctrl+Z
暂停它 - 如果忘记作业号,可以使用
jobs
命令查看 - 在脚本中,通常不使用
fg
命令,因为它需要交互式shell - 如果需要等待后台作业完成,可以使用
wait
命令而不是fg