溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux中的nohup命令怎么使用

發(fā)布時(shí)間:2023-03-31 10:47:22 來(lái)源:億速云 閱讀:148 作者:iii 欄目:開(kāi)發(fā)技術(shù)

今天小編給大家分享一下Linux中的nohup命令怎么使用的相關(guān)知識(shí)點(diǎn),內(nèi)容詳細(xì),邏輯清晰,相信大部分人都還太了解這方面的知識(shí),所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來(lái)了解一下吧。

nohup是什么

nohup是Linux和Unix系統(tǒng)中的一個(gè)命令,其作用是在終端退出時(shí),讓進(jìn)程在后臺(tái)繼續(xù)運(yùn)行。它的全稱為“no hang up”,意為“不掛起”。nohup命令可以讓你在退出終端或關(guān)閉SSH連接后繼續(xù)運(yùn)行命令。

nohup語(yǔ)法規(guī)則

nohup命令的基本語(yǔ)法如下:

nohup COMMAND [ARGS ...] [> output-file 2> error-file] &

其中的參數(shù)含義如下:

  • COMMAND:需要在后臺(tái)運(yùn)行的命令或腳本。

  • ARGS:命令或腳本的參數(shù)。

  • > output-file:輸出重定向到指定的文件中。

  • 2> error-file:錯(cuò)誤信息重定向到指定的文件中。

  • &:將命令放在后臺(tái)運(yùn)行。

nohup命令的執(zhí)行過(guò)程分為以下幾個(gè)步驟:

  • nohup命令將當(dāng)前shell的標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出全部重定向到/dev/null設(shè)備中,避免被關(guān)閉終端的信號(hào)所中斷。

  • nohup命令將進(jìn)程放到后臺(tái)執(zhí)行,并將進(jìn)程的PID輸出到終端。

  • 進(jìn)程開(kāi)始執(zhí)行,并將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到指定的文件中。

  • 用戶可以退出終端或關(guān)閉終端窗口,進(jìn)程仍然在后臺(tái)運(yùn)行。

nohup使用方法

使用nohup命令非常簡(jiǎn)單,按照上面的基本語(yǔ)法即可。以下是一些nohup命令的用法示例:

后臺(tái)運(yùn)行命令

要在后臺(tái)運(yùn)行命令,只需要在命令行中輸入以下命令即可:

nohup COMMAND &

例如,在后臺(tái)運(yùn)行一個(gè)Bash腳本:

nohup bash test.sh &

標(biāo)準(zhǔn)輸出重定向到文件

nohup bash test.sh > stdout.txt &

標(biāo)準(zhǔn)錯(cuò)誤輸出重定向到文件

nohup bash test.sh 2> stderr.txt &

將標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯(cuò)誤輸出都重定向到文件

1. 重定向到同一文件

nohup bash test.sh > output.txt 2>&1 &

2. 重定向到不同文件

nohup bash test.sh > stdout.txt 2> stderr.txt &

3. 一個(gè)更為復(fù)雜的例子,重定向標(biāo)準(zhǔn)輸入(stdin):

nohup ./myprogram > foo.out 2> foo.err < /dev/null &

這里多出來(lái)一個(gè)< /dev/null,意思是將標(biāo)準(zhǔn)輸入重定向到/dev/null,以確保程序不會(huì)從標(biāo)準(zhǔn)輸入中讀取任何數(shù)據(jù)。

這個(gè)是為了解決一個(gè)實(shí)際問(wèn)題:SSH會(huì)話常常拒絕注銷(或者掛起),因?yàn)樗辉敢馊G失與后臺(tái)job(s)進(jìn)行交互的數(shù)據(jù)。當(dāng)遇到這個(gè)問(wèn)題的時(shí)候,可以使用上面的命令,通過(guò)三次重定向來(lái)解決。

nohup后臺(tái)進(jìn)程管理

使用 jobs 命令可以查看當(dāng)前 shell 中后臺(tái)運(yùn)行的任務(wù)列表,包括任務(wù)編號(hào)、狀態(tài)和命令。

例如,我們?cè)诤笈_(tái)執(zhí)行一個(gè)sleep 1000命令,使用jobs命令查看:

$ jobs
[1]+  Running                 nohup sleep 1000 &

其中,方括號(hào)中的數(shù)字表示任務(wù)編號(hào),加號(hào)或減號(hào)表示任務(wù)的優(yōu)先級(jí),Running 表示任務(wù)正在后臺(tái)運(yùn)行。除此之外,還有其他可能的狀態(tài),包括 Stopped(已停止)、Done(已完成)等。

我們還可以使用 fg 命令將一個(gè)后臺(tái)任務(wù)移動(dòng)到前臺(tái)繼續(xù)運(yùn)行,例如:

$ fg %1

這個(gè)命令會(huì)將任務(wù)編號(hào)為 1 的任務(wù)移動(dòng)到前臺(tái),繼續(xù)執(zhí)行。如果希望將任務(wù)暫?;蚧謴?fù),可以使用 Ctrl-Z 鍵,在當(dāng)前 shell 中發(fā)送 SIGTSTP 信號(hào)。

$ fg %1
nohup sleep 1000

^Z
[1]+  Stopped                 nohup sleep 1000

此時(shí)如果想要恢復(fù)運(yùn)行,可以使用bg命令:

$ bg %1
[1]+ nohup sleep 1000 &

如果想要?dú)⑺涝撊蝿?wù),可以使用kill命令:

$ kill %1
[1]+  Terminated              nohup sleep 1000

如果你想殺死所有后臺(tái)任務(wù),但是又覺(jué)得一個(gè)個(gè)地比較麻煩,可以使用disown命令來(lái)解決:

$ disown -a

這個(gè)命令可以殺死所有后臺(tái)任務(wù),但不會(huì)有任何提示,你可以通過(guò)jobs命令來(lái)確認(rèn)。

以上就是“Linux中的nohup命令怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會(huì)為大家更新不同的知識(shí),如果還想學(xué)習(xí)更多的知識(shí),請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI