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指向的文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章