
nohup
nohup命令初識(shí)
在 Linux 中,nohup
命令 用于在后臺(tái)運(yùn)行命令,并將其輸出重定向到一個(gè)文件中,即使退出終端或關(guān)閉會(huì)話,該命令也能夠持久的運(yùn)行。 通常情況下,我們使用 nohup
命令來(lái)運(yùn)行那些需要較長(zhǎng)時(shí)間才能完成的任務(wù),或者需要在長(zhǎng)時(shí)間運(yùn)行的過(guò)程中保持連接的任務(wù),我們java的jar包就是一個(gè)很好的選擇。
nohup命令語(yǔ)法
語(yǔ)法:
nohup command [arg...] [arg &]
-
command
:是要運(yùn)行的命令及其參數(shù), -
&
:可以讓命令在后臺(tái)運(yùn)行 nohup
命令會(huì)將命令的輸出轉(zhuǎn)向到一個(gè)名為nohup.out
的文件中。這個(gè)是默認(rèn)的日志命令,可以通過(guò)tail -f nohup.out
查看- 如果您不想將輸出重定向到
nohup.out
文件,您可以使用>
或>>
運(yùn)算符將輸出重定向到其他文件中。
nohup java -jar xxx.jar > nohup.out &
nohup的原理
nohup
命令的原理是 將要執(zhí)行的命令與當(dāng)前終端會(huì)話進(jìn)行分離,使其脫離終端的控制,并在后臺(tái)持續(xù)運(yùn)行。它實(shí)際上是使用了兩個(gè)關(guān)鍵技術(shù):進(jìn)程分離和輸出重定向。
-
進(jìn)程分離:
nohup
命令使用了fork
和exec
系統(tǒng)調(diào)用來(lái)創(chuàng)建一個(gè)子進(jìn)程,并使子進(jìn)程成為一個(gè)新的會(huì)話組的領(lǐng)導(dǎo)者。 這樣可以使子進(jìn)程與終端斷開(kāi)關(guān)聯(lián),進(jìn)程不再受到終端關(guān)閉或用戶注銷的影響。 -
輸出重定向:
nohup
命令將子進(jìn)程的標(biāo)準(zhǔn)輸出(STDOUT)和標(biāo)準(zhǔn)錯(cuò)誤輸出(STDERR)重定向到一個(gè)文件中,默認(rèn)情況下是nohup.out
文件。這樣即使終端關(guān)閉,命令的輸出依然可以寫(xiě)入到文件中。
同時(shí)需要注意以下幾點(diǎn):
- 當(dāng)使用
nohup
命令運(yùn)行一個(gè)程序時(shí),該程序的標(biāo)準(zhǔn)輸入(STDIN)將會(huì)被關(guān)閉。因此,如果程序需要從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù),可能需要通過(guò)其他方式提供輸入。 -
nohup
命令執(zhí)行時(shí),會(huì)產(chǎn)生一個(gè) 子進(jìn)程,可能會(huì)導(dǎo)致一些資源的占用。如果運(yùn)行的是占用資源較多的程序,需要注意系統(tǒng)的負(fù)載情況。 -
nohup
命令并不會(huì)使命令變?yōu)槭刈o(hù)進(jìn)程(daemon process)。如果您希望在系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行某個(gè)命令,并將其作為守護(hù)進(jìn)程運(yùn)行,可以考慮使用其他工具,如systemd
或init.d
。
如何查看nohup的進(jìn)程
ps | grep
使用 ps
命令結(jié)合 grep
過(guò)濾器來(lái)查找包含特定關(guān)鍵詞的進(jìn)程。例如,使用以下命令可以查找包含關(guān)鍵詞 “nohup” 的進(jìn)程:
ps -ef | grep nohup
該命令將顯示與 “nohup” 相關(guān)的進(jìn)程列表。
pgrep
可以使用 pgrep
命令以及進(jìn)程的名稱或其他標(biāo)識(shí)符來(lái)查找匹配的進(jìn)程。例如,使用以下命令可以查找根據(jù)進(jìn)程名稱 “your_process_name” 執(zhí)行的進(jìn)程:
pgrep -l your_process_name
jobs
jobs
是一個(gè)用于查看當(dāng)前終端會(huì)話中正在運(yùn)行的作業(yè)(job)的命令。作業(yè)指的是在前臺(tái)或后臺(tái)運(yùn)行的進(jìn)程或命令。
使用 jobs
命令可以列出當(dāng)前終端會(huì)話中的作業(yè),并顯示作業(yè)的編號(hào)和狀態(tài)信息。以下是 jobs
命令的基本用法:
jobs [options]
常用的選項(xiàng)包括:
-
-l
:顯示詳細(xì)信息,包括作業(yè)編號(hào)、進(jìn)程 ID 和作業(yè)狀態(tài)。 -
-n
:只顯示最近創(chuàng)建的未通知作業(yè)。 -
-p
:只顯示進(jìn)程 ID。 -
-r
:只顯示運(yùn)行中的作業(yè)。 -
-s
:只顯示停止的作業(yè)。
示例用法:
$ sleep 60 & # 在后臺(tái)運(yùn)行 sleep 命令
[1] 12345
$ jobs
[1]+ Running sleep 60 &
在上面的示例中,sleep 60
命令被放到后臺(tái)運(yùn)行,并顯示了作業(yè)編號(hào) [1]
、進(jìn)程 ID 12345
和作業(yè)狀態(tài) Running
。
pu -ux
ps -ux
是一個(gè)常用的 Linux 命令,用于顯示當(dāng)前系統(tǒng)中運(yùn)行的進(jìn)程的詳細(xì)信息。下面是 ps -ux
命令的解釋:
ps -ux
-
-u
選項(xiàng)用于顯示與當(dāng)前用戶相關(guān)的進(jìn)程信息。 -
-x
選項(xiàng)用于顯示沒(méi)有控制終端的進(jìn)程。
該命令將顯示包括以下列在內(nèi)的進(jìn)程列表:
- USER:進(jìn)程所屬的用戶名。
- PID:進(jìn)程的 ID。
- %CPU:進(jìn)程使用的 CPU 百分比。
- %MEM:進(jìn)程使用的內(nèi)存百分比。
- VSZ:進(jìn)程使用的虛擬內(nèi)存(以 KB 為單位)。
- RSS:進(jìn)程使用的實(shí)際物理內(nèi)存(以 KB 為單位)。
- TTY:進(jìn)程所關(guān)聯(lián)的終端。
- STAT:進(jìn)程的狀態(tài)(R 表示運(yùn)行,S 表示睡眠,Z 表示僵尸等)。
- START:進(jìn)程啟動(dòng)的時(shí)間或日期。
- TIME:進(jìn)程消耗的 CPU 時(shí)間。
- COMMAND:?jiǎn)?dòng)進(jìn)程的命令或可執(zhí)行文件的名稱。
示例輸出如下:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 168872 9096 ? Ss 2023 0:05 /sbin/init
root 2 0.0 0.0 0 0 ? S 2023 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? I< 2023 0:00 [rcu_gp]
...
注意,ps -ux
命令會(huì)列出所有正在運(yùn)行的進(jìn)程的信息,包括系統(tǒng)進(jìn)程和其他用戶的進(jìn)程。如果想要限制輸出只顯示與當(dāng)前用戶相關(guān)的進(jìn)程,可以結(jié)合使用 grep
命令進(jìn)行過(guò)濾。例如:
如何關(guān)閉進(jìn)程
kill
使用kill命令關(guān)閉進(jìn)程。kill命令用于向進(jìn)程發(fā)送信號(hào),可以用來(lái)終止一個(gè)進(jìn)程。首先需要找到要關(guān)閉的進(jìn)程的進(jìn)程ID(PID),可以使用ps命令或者top命令來(lái)查看所有正在運(yùn)行的進(jìn)程。然后使用kill命令加上進(jìn)程ID來(lái)關(guān)閉進(jìn)程。例如,要關(guān)閉進(jìn)程ID為1234的進(jìn)程,可以運(yùn)行以下命令:
kill 1234
默認(rèn)情況下,kill命令發(fā)送的是SIGTERM信號(hào),這是一個(gè)終止進(jìn)程的常規(guī)信號(hào)。如果進(jìn)程不響應(yīng)SIGTERM信號(hào),可以使用kill命令加上-9選項(xiàng)來(lái)發(fā)送SIGKILL信號(hào),強(qiáng)制終止進(jìn)程。例如:
kill -9 1234
pkill
使用pkill命令關(guān)閉進(jìn)程。pkill命令可以根據(jù)進(jìn)程的名稱或者其他屬性來(lái)關(guān)閉進(jìn)程。例如,要關(guān)閉名稱為"process_name"的進(jìn)程,可以運(yùn)行以下命令:
pkill process_name
默認(rèn)情況下,pkill命令發(fā)送的是SIGTERM信號(hào),可以使用-9選項(xiàng)來(lái)發(fā)送SIGKILL信號(hào),強(qiáng)制終止進(jìn)程。
使用killall命令關(guān)閉進(jìn)程。killall命令可以根據(jù)進(jìn)程的名稱來(lái)關(guān)閉進(jìn)程。例如,要關(guān)閉名稱為"process_name"的進(jìn)程,可以運(yùn)行以下命令:
killall process_name
默認(rèn)情況下,killall命令發(fā)送的是SIGTERM信號(hào),可以使用-9選項(xiàng)來(lái)發(fā)送SIGKILL信號(hào),強(qiáng)制終止進(jìn)程。
結(jié)尾
恭喜小伙伴完成本篇文章的學(xué)習(xí),相信文章的內(nèi)容您已經(jīng)掌握得十分清楚了,如果您對(duì)工作技巧的知識(shí)十分好奇,請(qǐng)接下來(lái)跟著學(xué)習(xí)路徑完成相關(guān)的學(xué)習(xí)哦,相信你會(huì)做到的~~~
↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-836684.html
darr; ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-836684.html
到了這里,關(guān)于后端開(kāi)發(fā)從小白到大佬之Linux的命令(一):nohup,詳解底層?。?!的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!