shell脚本【符号1】 &的使用:后台运行/文件描述符

后台进程符号:&

本篇博客将会介绍符号“&”在不同场景下的使用,包括:

使用1:后台运行,包括后台一些操作,作业引用、怎样提交后台作业、怎样拉回前台查看等等

使用2:文件描述符引用


一、后台运行:

          ① 作用:提供后台运行机制。可以以后台进程方式运行命令,而无需等待命令执行完成

      ② 使用:在命令行最后加一个“&”即可。

      ③ 表现方式:增加“&”后,会输出后台进程的作业号和进程ID;而进程就在后台默默的执行。


        脚本举例:

        脚本实现功能:死循环

     脚本文件testBack,代码如下:

                    #!/bin/bash

                    number=1

                    sum=0

                    max=100

                    while [ "$number" -le "$max" ]

                    do

                                sum=`expr $sum + $number`

                                number=`expr $number + 1`

                                number=1        #通过给number一个恒定值1,让while死循环

                    done

                    source ./sum100 >/dev/null

                    echo $sum


       执行命令:bash testBack &

            输出:  [1]              22476

       分析:1表示作业号   22476表示进程ID

    从举例代码中延伸的问题:

      问题1:被分配的作业号和进程ID是唯一的吗?

                      是唯一的。

      问题2:后台进程的输出数据可能随时出现在用户的终端屏幕上,如何解决?

            方法一:应该可以通过输出重定向,把输出数据整个输出到文件中,防止意外输出到屏幕。

            方法二:使用命令:stty tostop,这个命令将会禁止后台作业输出数据

      问题3:如何查看后台进程?

             查看后台进程命令:jobs

                         输出:[1]+       Runing     bash testBack &

                         分析:作业号    运行状态    后台作业的命令行

      问题4:如何杀死一个后台进程?

             命令:kill %1

             分析:“1”是要杀死那个进程的作业号,%1表示使用作业号引用后台作业

      问题5:如何把一个后台作业提交到前台运行

             命令:fg  %1

             分析:%1表示作业号“1”对应的后台作业

                    前台运行的BUG:作业在前台运行时,如果不结束,则其它命令无法输入。

      问题6:如何将一个正在运行的前台程序设置为后台进程?

                     作用:防止一个前台进程运行时间太长,一直占用着资源。

             步骤1:组合键Ctrl Z(避免使用Ctrl C,因为这样会直接杀死一个前台进程)

                    输出:[1]+              Stopped         bash testBack &

                    分析:分配的作业号   当前作业的状态       命令行

                    会向Shell和当前程序发送一个STOP信号,后续操作有两种,输入命令:bg或fg。

             步骤2:选择一:把作业放到后台继续运行

                          命令: bg    %1

                          分析:bg命令会把“%1”代表的作业放在后台继续执行

                                选择二:把作业放到前台继续执行

                          命令: fg    %1

                          分析:fg命令会把“%1”代表的作业放在前台继续执行

      问题7:如何引用作业

                     作用:在对作业进行操作时,首先必须知道如何引用这个作业。

             方式1:%number:使用number作业号引用后台作业

             方式2:%string  :使用给定string,作为命令起始字符串引用作业

             方式3:%?string:这个就是整个命令中包含给定字符串的作业

             方式4:%%  %+  :这两个都表示引用当前作业

             方式5:%-       :引用前一个作业


二、描述符对应的文件引用

       “&”符号还可以用来和文件描述符进行搭配使用

         首先,文件描述符是做什么用的?

         Linux系统会为每一个打开的文件分配一个文件描述符,相当于一个打开文件在系统中的代号。这个代号可以和&结合使用,用于指向这个打开的文件。

         文件描述符常见的有:

            标准输入,文件描述符为0;

            标准输出,文件描述符为1;

            标准错误输出,文件描述符为2

     作用:主要是用在I/O重定向中,比如,把一个命令的输出重定向到一个&i指向的文件。

阅读更多

没有更多推荐了,返回首页