侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux bg命令教程:如何在Linux中控制后台进程(附案例详解和注意事项)

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。
1

评论区