<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Linux下幾種運行后臺任務(wù)的方法

          共 2175字,需瀏覽 5分鐘

           ·

          2022-01-13 11:57

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

          1.問題的引入

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

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

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

          2)sighup: signal hang up,關(guān)閉終端,網(wǎng)絡(luò)斷線,關(guān)閉屏幕會發(fā)送此掛斷信號。

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

          2 & 符號

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

          sh?test.sh?&

          3.nohup指令

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

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

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

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

          相關(guān)的數(shù)字含義如下:

          • 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怎么辦呢,難道我們需要先執(zhí)行ctrl + c將在前臺執(zhí)行的進程終止執(zhí)行再重新啟動嗎,顯然有好的方法!

          4.1 ctrl + z

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

          [1]+?Stopped?./test.sh

          4.2 jobs

          查看當(dāng)前有多少在后臺運行的命令,[jobnumber] 就是作業(yè)號。

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

          4.3 bg

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

          bg?1??

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

          4.4 fg

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

          fg?2???

          ./test2.sh

          5.screen命令

          5.1 介紹

          如果說上面的方法是通過linux 相關(guān)本身命令實現(xiàn)了前后臺任務(wù)調(diào)度,那么screen就提供了另外一種思路。

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

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

          5.2 安裝

          yum?install?screen

          5.3 使用

          1)新建會話

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

          2) 列出當(dāng)前所有的session

          screen?-ls

          3)恢復(fù)會話(回到y(tǒng)ourname這個session)

          screen?-r?yourname

          4) detach某個session

          screen?-d?yourname?->?遠(yuǎn)程detach某個session?
          screen?-d?-r?yourname?->?結(jié)束當(dāng)前session并回到y(tǒng)ourname這個session

          5)刪除會話

          screen?-S?pid-X?quit

          文章轉(zhuǎn)載:51CTO
          (版權(quán)歸原作者所有,侵刪)

          瀏覽 62
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最好看2019中文在线播放电影 | 久久久久99精品欧美成人 | 色五月播五月丁香综合 | 久操B| 日本一级视频免费看 |