bg命令将bash作业放到后台运行


bg命令将bash作业放到后台运行
在bash后台的作业有两种状态,一种是stopped暂停状态,还有一种running运行状态。还有一个exit状态。前面ctrl-z是将bash前台运行的作业进程放到后台暂停, &在bash后台启动和运行一个作业。
而bg命令可以将正在bash前台运行的作业进程放到后台运行,也可以将后台暂停中的作业进程在后台运行。总之bg命令就是将bash作业放到后台运行。
bg命令的常用格式和fg一样:
              [root@initroot ~]# bg [%][jobnumber]
            
[%][jobnumber]参数就不过多解释了,和fg是一样的。
但是要注意,在后台运行的作业进程不能有stdin输入,否则是无法运行的,只能在后台暂停。例如上面的vim进程,因为vim时刻在等待用户的输入, 如果将vim进程放入后台运行,那么用户在命令行的所有输入,vim进程是接收不到的。所以有stdin输入的进程只能在前台运行或在后台暂停,而不能在后台运行。 只有stdout或stderr输出,而没有stdin输入的进程既可以在前台运行,也可以放入后台运行或者暂停。 但是正如我们讲到的,带输出的作业进程在启动前需要先将数据重定向到非屏幕文件中。
上面编号为2的find作业进程在运行的过程中会有大量的输出,所以我们将该作业进程调到前台运行,用ctrl+c强制终止。 然后重新执行find / -print命令,并将输出重定向到findresult.txt文件中,进程启动后,立即按下ctrl-z将作业进程放入后台暂停:

              [root@initroot ~]# find / -print > /tmp/findresult.txt 2>&1
              ^Z                # enter后立即按下ctrl-z将作业进程放入后台暂停!
              [2]+  Stopped                 find / -print > /tmp/findresult.txt 2>&1
              
jobs查看后台作业进程:
                [root@initroot ~]# jobs
                [1]-  Stopped                 vim .bashrc
                [2]+  Stopped                 find / -print > /tmp/findresult.txt 2>&1
              
编号为2的作业进程已经在bash后台暂停了,我们用bg %2将该作业进程在后台运行,然后用jobs查看作业进程状态:
                root@initroot:~# bg %2; jobs
                [2]+ find / -print > /tmp/findresult.txt 2>&1 &
                root@initroot:~# 
              
                  root@initroot:~# bg %2; jobs
                  [1]+  Stopped                 vim .bashrc
                  [2]-  Running                 find / -print > /tmp/findresult.txt 2>&1 &
                  root@initroot:~# 
                
可以看到编号为2的作业进程状态由刚才的Stopped,变成了现在的Running,后面的命令字符转最后也多了一个&符号,表示目前作业进程在后台运行。 同时也可以观察到作业编号后面的+/-号发生了变化。
因为进程是在bash后台运行的,所以使用ctrl+c是无法终止该进程的。 我们现在将该进程调到前台运行,然后在使用ctrl+z调到后台暂停:
              root@initroot:~# fg %2;
              ^Z    
              root@initroot:~# 
            

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读