Linux nohup命令詳解,終端關閉程序依然可以在執行!

2021-02-14 頂級程式設計師

在工作中,我們很經常跑一個很重要的程序,有時候這個程序需要跑好幾個小時,甚至需要幾天,這個時候如果我們退出終端,或者網絡不好連接中斷,那麼程序就會被中止。而這個情況肯定不是我們想看到的,我們希望即使終端關閉,程序依然可以在跑。

這時我們就可以使用 nohup 這個命令。

nohup 命令是英語詞組 no hangup 的縮寫,意思是不掛斷,也就是指程序不退出。這個命令會使程序忽略 HUP 信號,保證程序能夠正常進行。HUP 信號有些人可能比較陌生,它是在終端被中止的時候向它所關聯的進程所發出的信號,進程收到這個信號後就會中止運行。所以如果你不希望進程被這個信號幹掉的話,就可以忽略這個信號。而 nohup 命令做的就是這個事情。

本文我們將詳細介紹 nohup 命令的具體用法。

nohup命令基本語法

nohup 命令的基本語法如下:

$ nohup command arguments

或者:

如果你想要得到更多關於 nohup 的用法介紹,可以查看它的幫助頁面:

如果你需要查看它的版本號,可以使用 --version 選項。

使用nohup命令啟動一個程序

如果你需要運行一個程序,即使對應的 Shell 被退出後依然保持運行,可以這樣使用 nohup 運行這個程序:

當這個程序進行起來之後,這個程序對應的 log 輸出及其錯誤日誌都將被記錄在 nohup.out 文件裡,這個文件一般位於家目錄或者當前目錄。

重定向程序的輸出

如果我不想把程序的輸出保存在家目錄或者當前目錄,我想保存在我指定的路徑,並且自定義文件名,要怎麼操作?這時我們就可以使用重定向操作 > 。

比如,我現在有個腳本 myScript.sh 我想把它的輸出保存在家目錄下的 output 目錄下,文件名為 myOutput.txt ,可以這樣運行:

$ nohup ./myScript.sh > ~/output/myOutput.txt

使用nohup命令後臺啟動一個程序

如果想讓程序在後臺運行,可以加上 & 符號。但這樣運行之後,程序就無影無蹤了。想要讓程序重新回到終端,可以使用 fg 命令。

這個命令的輸出 log 將保存在 nohup.out 文件裡,你可以使用 cat 或其它命令查看。第二行裡 8699 這個數字代表這個命令對應的進程號,也就是 pid 。我們可以使用 ps 命令來找到這個進程。

使用nohup同時運行多個程序

如果你需要同時跑多個程序,沒必要一個個運行,直接使用 && 符號即可。比如,你想同時跑 mkdir ,ping,ls 三個命令,可以這樣運行:

$ nohup bash -c 'mkdir files &&ping -c 1 baidu.com && ls'> output.txt

終止跑在後臺的進程

上面有提到,nohup 命令結合 & 符號可以使進程在後臺運行,即使關閉了終端依然不受影響。這時,如果想要終止這個進程,要怎麼操作呢?

最簡單的當屬 kill 命令,相信大家用過很多次了。

那要如何找到進程對應的 pid 呢?我們可以使用 ps 命令。

$ ps aux | grep myScript.sh

或者你使用 pgrep 命令也行。

接下來,再使用 kill 命令就可以終止該進程了。

-END-

已有50萬人
領取Python案例實戰課

相關焦點

  • Linux nohup 命令詳解,終端關閉程序依然可以在執行!
    而這個情況肯定不是我們想看到的,我們希望即使終端關閉,程序依然可以在跑。這時我們就可以使用 nohup 這個命令。nohup 命令是英語詞組 no hangup 的縮寫,意思是不掛斷,也就是指程序不退出。這個命令會使程序忽略 HUP 信號,保證程序能夠正常進行。
  • Linux進程管理命令:nohup、&、jobs、fg、bg、ps、kill
    & &用在一個命令的最後,可以把這個命令放到後臺執行,可以輸入jobs 查看後臺執行的命令。jobs jobs命令用於查看正在執行的後臺進程,但只能看當前終端生效的進程,如果關閉當前終端後,在另一個終端下,jobs已經無法看到後臺跑得程序了,此時利用ps(進程查看命令)。
  • 日常開發中常用命令之 nohup 命令
    拷貝上去之後再通過 ssh 命令連接到伺服器終端,這裡假設伺服器都已經是安裝好了 Java 的運行時環境。接下來我們就可以啟動剛才拷貝上來的 jar 包了。但是如果想要在我們退出終端後讓它保持繼續運行的話就不行了,因為上面的這種方式在我們退出終端的同時程序也停止運行了。這時候就有必要通過後臺啟動的方式來讓程序保持在後臺繼續運行,也就是 nohup 命令。nohup 英文全稱是 no hang up(不掛起),用於在系統後臺不掛斷地運行命令,退出終端不會影響程序的運行。
  • Linux命令行與Shell腳本編程學習筆記20
    nohup命令運行了另外一個命令來阻斷所有發送給該進程的SIGHUP信號。這會在退出終端會話時阻止進程退出。5. nohup命令的格式: nohup 命令 &為了保護該命令產生的輸出,nohup命令會自動將STDOUT和STDERR的消息重定向到一個名為nohup.out的文件中。6.
  • linux作業系統常用命令及常用問題
    >linux作業系統詳解(linux不再難懂)●man :任何時候你覺得對一個命令行不是很確定,都可以通過輸入「man + 命令」了解這個命令能確切是做什麼的。●sudo :(super user do)命令允許授權用戶執行超級用戶或者其它用戶的命令。●touch :創建一個新文件,或者將文件的訪問和修改時間更新為當前時間。
  • LINUX常用100條命令總結(三)
    [root@localhost ~]#13.5 watch功能:周期性的執行給定的命令,並將命令的輸出以全屏方式顯示語法:watch [參數] [命令]參數:-n/--interval watch默認每2秒運行一下程序,可以用-n或-interval來指定間隔的時間
  • vim+py文件構造linux後門
    執行後會出現黑色的等待連接窗口,在攻擊機成功連接後,連接窗口會變成一個命令輸入窗口,並需要輸入q進行退出操作。然後在我們使用過程中,這個窗口並不需要。那我們就得考慮,如何啟動的時候就不顯示該窗口。這裡我們可以使用linux中nohup功能,用來將命令進行後臺執行。
  • 20分鐘吃掉Linux常用命令40式
    前100行例2:tail -n 100 -f nohup.out #查看文件nohup.out的後100行並動態刷新16, cut 截取文件某些列可以指定分割方式 -d 為自定義分割方式, -b 按字節分割, -c 按字符分割 ,用-f指定取第幾列
  • Linux下使用nohup命令,輸出信息到指定文件
    在Linux環境中,進行部署項目時,經常會用到nohup命令,以Weblogic容器為例,使用nohup命令啟動項目,並把輸出寫到指定的文件中去,寫法如下 nohup .
  • GNU 核心實用程序簡介 | Linux 中國
    許多 Linux 系統管理員最基本和常用的工具主要包括在兩套實用程序中:GNU 核心實用程序(coreutils)和 util-linux。它們的基本功能允許系統管理員執行許多管理 Linux 系統的任務,包括管理和操作文本文件、目錄、數據流、存儲介質、進程控制、文件系統等等。
  • Linux終端:用cat命令查看不可見字符
    Linux終端:用cat命令查看不可見字符 時常,某個程序或軟體並沒有語法錯誤,並且你檢查它的相關內容也確實沒有發現問題。這是因為你用普通文本編輯器軟體來查看的時候,有許多字符沒有顯示出來,但在終端使用cat命令可以很容易地檢測出是否存在這些字符。
  • Linux 命令匯總
    wget命令行下載文件。ping測試主機之間網絡的連通性。route顯示和設置 linux 系統的路由表。ifconfig查看、配置、啟用或禁用網絡接口的命令。ifup啟動網卡。ifdown關閉網卡。history查看命令執行的歷史紀錄。eject彈出光碟機。time計算命令執行時間。nc功能強大的網絡工具。xargs將標準輸入轉換成命令行參數。exec調用並執行指令的命令。
  • Linux中你分得清什麼是終端,控制臺,外殼程序和內殼嗎?
    該終端是一個程序,可為用戶提供簡單的命令行界面,並執行以下兩個任務:以命令的形式接受用戶的輸入在屏幕上顯示輸出 我們可以說終端是一個愚蠢的東西,因為它不知道如何處理輸入,因此它需要另一個程序來處理它,並且在大多數情況下,它是外殼程序。
  • Linux中常用命令
    :shell指令alias:定義命令別名bg:將作業(或任務)放到後臺運行bind:顯示或設置鍵盤配置declare:聲明shell變量dirs:顯示shell目錄堆棧中的記錄echo:列印字符串到標準輸出enable:激活與關閉shell內部命令eval:執行指定指令並返回結果exec:執行給定指令後退出登錄exit:
  • Linux系統關閉或重新啟動主機的命令詳解
    即使現在Linux系統基本都是相對穩定,但有時候驅動程序和應用程式也可能存在一些小問題,這時就需要重新啟動Linux系統主機,今天美聯科技就來講解下,關閉或重新啟動Linux系統的幾個實用命令。該命令為:shutdown [option] [time] [message]例如,要立即關閉主機,可以使用:shutdown -h now這裡,-h表示暫停,而now明確表示該指令應立即執行。可以使用不同的延遲,例如,可以使用+9代替,這將告訴主機在9分鐘內運行關機程序。
  • linux關機命令是什麼-太平洋IT百科手機版
    linux關機命令是什麼  Liux是一套免費使用和自由傳播的類Uix作業系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的作業系統。那麼linux關機命令是什麼?下面為大家介紹下linux關機命令,趕緊看看吧。
  • Linux下C應用程式開發
    This GDB was configured as i386-redhat-linux.(gdb)  當你啟動 gdb 後, 你能在命令行上指定很多的選項. 你也可以以下面的方式來運行 gdb:  gdb fname>;  當你用這種方式運行 gdb , 你能直接指定想要調試的程序.
  • 沒有公網IP,花生殼+SSH實現Windows連接遠程Linux執行命令
    花生殼不需要公網IP,也不用路由器設置,通過內網穿透對SSH服務埠進行映射,將動態IP映射為固定域名,就可以快速實現Windows連接Linux系統進行遠程訪問。下面就為大家介紹,如何使用花生殼+SSH實現Linux服務的遠程操作。1.
  • 每天一個 Linux 命令(23):Linux 目錄結構
    可分享的:可以分享給其他系統掛載使用的目錄,所以包括執行文件與用戶的郵件等數據, 是能夠分享給網絡上其他主機掛載用的目錄;2. 不可分享的:自己機器上面運作的裝置文件或者是與程序有關的socket文件等, 由於僅與自身機器有關,所以當然就不適合分享給其他主機了。3.
  • 乾貨|分享10個讓您震撼的Linux終端命令
    02 暫停命令並在後臺運行命令要在後臺運行終端命令,請按:CTRL+Z:暫停應用程式fg:返回到應用程式當您按下CTRL+Z時,前臺應用程式將暫停,將返回到命令行。然後,您可以運行任何您喜歡的命令,完成後,再通過在終端窗口中輸入fg並按回車鍵回到您之前暫停的會話。如圖:03 在特定時間運行Linux命令通過Linux終端使用at命令調度任務,假設您要在特定的時間點運行同一命令。