• <dd id="hdgin"><track id="hdgin"></track></dd>
  • <em id="hdgin"><tr id="hdgin"></tr></em>
  • <th id="hdgin"><track id="hdgin"><noframes id="hdgin"></noframes></track></th>
        <rp id="hdgin"><ruby id="hdgin"></ruby></rp>

        <legend id="hdgin"><noscript id="hdgin"><video id="hdgin"></video></noscript></legend>
          <dd id="hdgin"><track id="hdgin"></track></dd>
            首頁 運維干貨Linux下幾種運行后臺任務的方法

            Linux下幾種運行后臺任務的方法

            運維派隸屬馬哥教育旗下專業運維社區,是國內成立最早的IT運維技術社區,歡迎關注公眾號:yunweipai
            領取學習更多免費Linux云計算、Python、Docker、K8s教程關注公眾號:馬哥linux運維

            今天就給大家介紹linux中幾種后臺任務的執行方法避免上述問題。

            Linux下幾種運行后臺任務的方法插圖

            1.問題的引入

            程序員最不能容忍的是在使用終端的時候往往因為網絡,關閉屏幕,執行CTRL+C等原因造成ssh斷開造成正在運行程序退出,使得我們的工作功虧一簣。

            其背后的主要原因在于上述的相關操作,shell默認會發送中斷信號給該終端session關聯的進程,從而導致進程跟隨終端退出,為了弄清這個問題我們首先要了解兩種中斷信號:

            1)sigint:signal interrupt,ctrl+c會發送此信號,主動關閉程序

            2)sighup: signal hang up,關閉終端,網絡斷線,關閉屏幕會發送此掛斷信號。

            今天就給大家介紹linux中幾種后臺任務的執行方法避免上述問題。

            2 & 符號

            這是一種把 &放在執行命令最后,使啟動的程序忽略sigint信號,此時執行ctrl+c關閉就不會關閉此進程,但是當屏幕關閉,斷網仍然會造成進程退出。

            sh test.sh &
            

            3.nohup指令

            nohup(no hang up),意思就是不掛斷運行,用nohup運行命令可以使命令永久執行下去,和用戶終端沒有關系,斷開SSH不影響運行,nohup捕獲了SIGHUP,并做了忽略處理,因此當屏幕關閉,斷網等造成ssh中斷時進程不會退出。但是ctrl+c可以關閉關閉該進程。因此大多數情況同時使用nohup和&啟動的程序,ctrl+c和關閉終端都無法關閉。在缺省情況下所有輸出都被重定向到一個名為nohup.out的文件中。

            nohup指令基本使用格式:
            nohup Command \[ Arg ... \] \[ & \]
            
            舉例

            后臺不中斷執行./test.sh,stdout輸出給out.log,stderr輸出給err.log

            nohup ./test.sh > out.log 2>err.log  &
            

            相關的數字含義如下:

            • 0 – stdin (standard input),

            • 1 – stdout (standard output),顯然 nohup command > out.log 等價于 nohup command 1> out.log,是缺省行為。

            • 2 – stderr (standard error)

            可能你也會見到這種寫法,其含義是把stderr也重定向給stdin

            nohup ./test.sh > out.log 2>&1  &
            

            4.ctrl + z、jobs、fg、bg

            如果我們程序在啟動的時候并沒有使用&,nohup怎么辦呢,難道我們需要先執行ctrl + c將在前臺執行的進程終止執行再重新啟動嗎,顯然有好的方法!

            4.1 ctrl + z

            將一個正在前臺執行的作業進程放到后臺,并且暫停,用術語講就是掛起,執行后如下:

            [1]+ Stopped ./test.sh
            

            4.2 jobs

            查看當前有多少在后臺運行的命令,[jobnumber] 就是作業號。

            jobs  
            [1]+ Stopped ./test.sh   
            [2]+ Running ./test2.sh &
            

            4.3 bg

            將后臺中暫停(掛起)的作業進程繼續運行,例如把1號作業(./test.sh) 放到后臺運行,注意看已經帶了&

            bg 1  
            
            [1]+ ./test.sh  &
            

            4.4 fg

            將后臺中的作業進程調至前臺繼續運行,例如把2號作業(./test2.sh &)調至前臺運行

            fg 2   
            
            ./test2.sh
            

            5.screen命令

            5.1 介紹

            如果說上面的方法是通過linux 相關本身命令實現了前后臺任務調度,那么screen就提供了另外一種思路。

            不說人話的版本:GNU Screen是一款由GNU計劃開發的用于命令行終端切換的自由軟件。用戶可以通過該軟件同時連接多個本地或遠程的命令行會話,并在其間自由切換。GNU Screen可以看作是窗口管理器的命令行界面版本。它提供了統一的管理多個會話的界面和相應的功能。

            說人話的版本: 我們可以粗略地認為screen是一個虛擬終端軟件,直接在linux系統里面啟動了另外一個后臺程序接管(維持)了你的終端會話,當你直接連接的終端ssh斷開時他仍然讓程序認為你的ssh持續鏈接著,這樣也就不會出現進程接收到中斷信號而退出。

            5.2 安裝

            yum install screen
            

            5.3 使用

            1)新建會話

            screen -S yourname -> 新建一個叫yourname的session
            

            2) 列出當前所有的session

            screen -ls
            

            3)恢復會話(回到yourname這個session)

            screen -r yourname
            

            4) detach某個session

            screen -d yourname -> 遠程detach某個session 
            screen -d -r yourname -> 結束當前session并回到yourname這個session
            

            5)刪除會話

            screen -S pid-X quit
            

            本文鏈接:http://m.abandonstatusquo.com/40879.html

            網友評論comments

            發表評論

            您的電子郵箱地址不會被公開。

            暫無評論

            Copyright ? 2012-2022 YUNWEIPAI.COM - 運維派 京ICP備16064699號-6
            掃二維碼
            掃二維碼
            返回頂部
            久久久久亚洲国内精品|亚洲一区二区在线观看综合无码|欧洲一区无码精品色|97伊人久久超碰|一级a爱片国产亚洲精品