Linux bg命令介绍
bg命令是background的缩写,它用来将一个或多个暂停的作业(job)放到后台继续执行。作业是指在同一个终端下运行的一个或多个进程(process)的集合。当你在终端中运行一个程序时,它会占用终端的输入和输出,直到结束或被中断。如果你想在同一个终端下同时运行多个程序,你可以使用bg命令来实现。bg命令可以让你在后台执行一个程序,而不影响你在前台执行其他命令。
Linux bg命令适用的Linux版本
bg命令是一个内置在shell中的命令,它不需要安装,只要你的shell支持作业控制(job control),就可以使用bg命令。常见的shell,如bash,zsh,ksh,都支持作业控制。你可以通过echo $SHELL
命令来查看你当前使用的shell。如果你想切换到其他的shell,你可以通过chsh
命令来修改你的默认shell。
/bin/bash
[linux@bashcommandnotfound.cn ~]$ chsh -s /bin/zsh
Changing shell for linux.
Password:
Shell changed.
[linux@bashcommandnotfound.cn ~]$ echo $SHELL
/bin/zsh
Linux bg命令的基本语法
bg命令的基本语法如下:
bg [job_spec ...]
其中,job_spec
是指作业的标识符,它可以是一个数字,表示作业的序号,也可以是一个百分号%
后跟一个字符,表示作业的状态或名称。如果不指定job_spec
,则默认将最近的一个暂停的作业放到后台执行。
Linux bg命令的常用选项或参数说明
bg命令没有选项,只有参数,即job_spec
。下表列出了一些常用的job_spec
的含义和示例:
job_spec | 含义 | 示例 |
---|---|---|
%n | 第n个作业 | bg %1 |
%+ 或 %% | 当前作业,即最近的一个作业 | bg %+ |
%- | 上一个作业,即倒数第二个作业 | bg %- |
%?str | 包含str的作业 | bg %?ping |
%str | 以str开头的作业 | bg %sleep |
Linux bg命令的实例
下面是一些使用bg命令的实例,结合了一些常见的搜索关键词。
如何使用bg命令将一个暂停的作业放到后台执行
假设你在终端中运行了一个ping命令,它会不断地向一个IP地址发送数据包,并显示回应的时间。你可以通过按下Ctrl+Z
组合键来暂停这个作业,然后你会看到类似这样的输出:
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=117 time=2.25 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=117 time=2.21 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=117 time=2.22 ms
^Z
[1]+ Stopped ping 8.8.8.8
这里,[1]+
表示这是第一个作业,Stopped
表示这个作业已经暂停了。你可以通过jobs
命令来查看当前有哪些作业,以及它们的状态和命令。
[1]+ Stopped ping 8.8.8.8
如果你想让这个作业继续执行,但不占用你的终端,你可以使用bg
命令来将它放到后台。你可以指定作业的标识符,如bg %1
,或者直接使用bg
,因为它会默认选择最近的一个暂停的作业。你会看到类似这样的输出:
[1]+ ping 8.8.8.8 &
[linux@bashcommandnotfound.cn ~]$ jobs
[1]+ Running ping 8.8.8.8 &
这里,&
表示这个作业是在后台执行的,Running
表示这个作业已经恢复了运行。你可以继续在终端中输入其他命令,而不会被ping命令的输出打断。如果你想查看ping命令的输出,你可以使用fg
命令来将它切换到前台,或者使用tail -f /proc/$!/fd/1
命令来查看它的标准输出,其中$!
是指最近一个后台作业的进程号(PID)。
如何使用bg命令将多个暂停的作业放到后台执行
如果你有多个暂停的作业,你可以一次性将它们都放到后台执行,只需要在bg
命令后面加上它们的标识符,用空格隔开。例如,假设你有三个暂停的作业,分别是ping,sleep和top,你可以通过jobs
命令来查看它们的信息:
[1] Stopped ping 8.8.8.8
[2]- Stopped sleep 100
[3]+ Stopped top
如果你想将它们都放到后台执行,你可以使用bg %1 %2 %3
或者bg %+ %- %1
命令,你会看到类似这样的输出:
[1] ping 8.8.8.8 &
[2]- sleep 100 &
[3]+ top &
[linux@bashcommandnotfound.cn ~]$ jobs
[1] Running ping 8.8.8.8 &
[2]- Running sleep 100 &
[3]+ Running top &
这样,你就可以在后台执行多个作业,而不影响你在前台执行其他命令。
如何使用bg命令将一个后台作业暂停和恢复
如果你已经将一个作业放到后台执行,但是你想暂停它,你可以使用kill
命令来向它发送SIGSTOP
信号,让它停止运行。例如,假设你有一个后台执行的ping命令,你可以通过jobs
命令来查看它的信息:
[1]+ Running ping 8.8.8.8 &
如果你想暂停它,你可以使用kill -SIGSTOP %1
或者kill -STOP %1
命令,你会看到类似这样的输出:
[1]+ Stopped ping 8.8.8.8
[linux@bashcommandnotfound.cn ~]$ jobs
[1]+ Stopped ping 8.8.8.8
这样,你就可以将一个后台作业暂停,而不影响你在前台执行其他命令。如果你想恢复这个作业的运行,你可以使用bg
命令来将它再次放到后台执行,或者使用fg
命令来将它切换到前台执行。例如,你可以使用bg %1
命令来恢复ping命令的运行,你会看到类似这样的输出:
[1]+ ping 8.8.8.8 &
[linux@bashcommandnotfound.cn ~]$ jobs
[1]+ Running ping 8.8.8.8 &
这样,你就可以在后台继续执行ping命令,而不占用你的终端。
如何使用bg命令将一个前台作业放到后台执行
如果你在终端中运行了一个程序,但是你想在不结束它的情况下,切换到其他的命令,你可以使用bg
命令来将它放到后台执行。但是,你需要先暂停这个作业,然后再使用bg
命令。例如,假设你在终端中运行了一个top命令,它会显示系统的资源使用情况。你可以通过按下Ctrl+Z
组合键来暂停这个作业,然后你会看到类似这样的输出:
top - 09:55:08 up 1:23, 1 user, load average: 0.00, 0.01, 0.05
Tasks: 97 total, 1 running, 96 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0.0 us, 0.0 sy, 0.0 ni,100.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
MiB Mem : 1939.6 total, 540.4 free, 303.5 used, 1095.7 buff/cache
MiB Swap: 2048.0 total, 2048.0 free, 0.0 used. 1470.6 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
857 linux 20 0 10856 3820 3180 R 0.0 0.2 0:00.02 top
1 root 20 0 169100 7040 4944 S 0.0 0.4 0:02.11 systemd
2 root 20 0 0 0 0 S 0.0 0.0 0:00.00 kthreadd
3 root 0 -20 0 0 0 I 0.0 0.0 0:00.00 rcu_gp
...
[1]+ Stopped top
这里,[1]+
表示这是第一个作业,Stopped
表示这个作业已经暂停了。你可以通过bg
命令来将它放到后台执行,你会看到类似这样的输出:
[1]+ top &
[linux@bashcommandnotfound.cn ~]$ jobs
[1]+ Running top &
这样,你就可以在后台执行top命令,而不占用你的终端。你可以继续在终端中输入其他命令,而不会被top命令的输出打断。如果你想查看top命令的输出,你可以使用fg
命令来将它切换到前台,或者使用tail -f /proc/$!/fd/1
命令来查看它的标准输出,其中$!
是指最近一个后台作业的进程号(PID)。
Linux bg命令的快捷键
Linux的bg命令没有特定的快捷键,但是你可以使用一些其他的快捷键来控制后台进程,例如:
Ctrl + Z
:将一个正在前台执行的命令放到后台,并且暂停。jobs
:查看当前有多少在后台运行的命令。fg
:将后台中的命令调至前台继续运行。Ctrl + C
:取消当前行输入的命令,或者强制中断一个后台进程。
Linux bg命令的注意事项
在使用bg命令时,有一些注意事项需要了解:
- bg命令只能将暂停的作业放到后台执行,如果一个作业已经在后台执行,或者已经结束,或者没有暂停,那么bg命令会报错。例如:
[linux@bashcommandnotfound.cn ~]$ bg %2
bash: bg: %2: no such job
[linux@bashcommandnotfound.cn ~]$ bg %1
bash: bg: job 1 already in background
- bg命令只能在交互式的shell中使用,如果你在一个脚本中使用bg命令,它会被忽略。如果你想在脚本中将一个命令放到后台执行,你可以在命令后加上一个&符号。这样,命令就会在后台运行,不会阻塞当前的shell。
评论区