前言
高效管理 Linux 進(jìn)程:如何后臺(tái)執(zhí)行程序、查看進(jìn)程、終止任務(wù)一、nohup命令詳解
1-1、nohup命令介紹
nohup:nohup是“no hangup”的縮寫,用于在后臺(tái)不掛斷的運(yùn)行命令,使其在用戶退出或終端關(guān)閉時(shí)不受影響。它通過忽略掛斷(SIGHUP)信號(hào)實(shí)現(xiàn)這一功能。換句話說,nohup 是一條 Unix 命令,用于在后臺(tái)執(zhí)行程序,即使當(dāng)前終端會(huì)話已經(jīng)關(guān)閉或者斷開,程序也可以繼續(xù)運(yùn)行。nohup 命令的使用非常簡(jiǎn)單,只需要在要執(zhí)行的命令前加上 nohup 和 & 符號(hào)即可。
1-2、語法格式
1-2-1、基礎(chǔ)語法介紹
nohup 命令的語法如下:
nohup command [arg...] &
# 其中,command 表示要在后臺(tái)執(zhí)行的命令或進(jìn)程,arg 表示命令或進(jìn)程的參數(shù),& 符號(hào)表示將命令或進(jìn)程放到后臺(tái)執(zhí)行。
注意:nohup 命令的執(zhí)行結(jié)果會(huì)輸出到當(dāng)前目錄下的 nohup.out 文件中。如果要將命令或進(jìn)程的輸出重定向到其他文件中,可以使用重定向符號(hào)(>)指定輸出文件的路徑。例如:
nohup command [arg...] > output_file &
1-2-2、執(zhí)行腳本文件
在執(zhí)行 nohup 命令時(shí),如果 command 是一個(gè)腳本文件,那么需要給該腳本文件添加可執(zhí)行權(quán)限(chmod +x script.sh)。否則,會(huì)提示 “no such file or directory” 的錯(cuò)誤。添加執(zhí)行權(quán)限后執(zhí)行nohup 命令
nohup sh filename.sh &
1-2-3、執(zhí)行python文件
執(zhí)行python文件: nohup 命令通常用于長(zhǎng)時(shí)間運(yùn)行的任務(wù),例如在服務(wù)器上運(yùn)行后臺(tái)進(jìn)程或者執(zhí)行需要花費(fèi)較長(zhǎng)時(shí)間的腳本。在使用 nohup 命令時(shí),建議將程序的輸出重定向到一個(gè)日志文件中,以便后續(xù)查看程序的運(yùn)行情況。
例如,要在后臺(tái)執(zhí)行一個(gè) Python 腳本,并將輸出重定向到一個(gè)日志文件中,可以使用以下命令:
nohup python my_script.py > my_script.log &
這將在后臺(tái)執(zhí)行 my_script.py 腳本,并將輸出重定向到 my_script.log 文件中。如果當(dāng)前終端會(huì)話已經(jīng)關(guān)閉或者斷開,my_script.py 仍將繼續(xù)在后臺(tái)運(yùn)行,并將輸出寫入到 my_script.log 文件中。
1-2-4、拓展延申:在服務(wù)器上運(yùn)行后臺(tái)進(jìn)程
拓展延申:nohup 命令的一個(gè)常見用途是在服務(wù)器上運(yùn)行后臺(tái)進(jìn)程,例如 Web 服務(wù)器、數(shù)據(jù)庫服務(wù)器等。在執(zhí)行這些服務(wù)時(shí),可以使用 nohup 命令將服務(wù)放到后臺(tái)運(yùn)行,并將輸出重定向到日志文件中。
例如,在 Linux 系統(tǒng)上,要在后臺(tái)啟動(dòng)一個(gè) Apache Web 服務(wù)器,并將輸出重定向到日志文件中,可以使用以下命令:
nohup /usr/local/apache2/bin/httpd -k start > /var/log/httpd.log &
這將在后臺(tái)啟動(dòng) Apache Web 服務(wù)器,并將輸出重定向到 /var/log/httpd.log 文件中。
需要注意的是,nohup 命令并不是萬能的,它不能保證被執(zhí)行的命令或進(jìn)程一定會(huì)一直運(yùn)行。如果命令或進(jìn)程本身存在問題或異常,仍然可能會(huì)被終止或崩潰。因此,在使用 nohup 命令時(shí),仍需要對(duì)被執(zhí)行的命令或進(jìn)程進(jìn)行監(jiān)控和管理。
1-2-5、nohup和&的區(qū)別
&:是指在后臺(tái)運(yùn)行,當(dāng)用戶退出(掛起)的時(shí)候,命令自動(dòng)跟著結(jié)束
nohup:不掛斷的運(yùn)行,注意并沒有后臺(tái)運(yùn)行的功能,就是指用nohup運(yùn)行命令可以使命令永久的執(zhí)行下去,和用戶終端沒有關(guān)系,例如我們斷開SSH連接都不會(huì)影響他的運(yùn)行,注意了nohup沒有后臺(tái)運(yùn)行的意思;&才是后臺(tái)運(yùn)行, 使用nohup后關(guān)閉了標(biāo)準(zhǔn)輸入,終端不能再接受任何輸入。
因此將nohup和&結(jié)合使用,就可以實(shí)現(xiàn)使命令永久地在后臺(tái)執(zhí)行的功能,結(jié)合使用后,終端可以接受任何輸入。
二、進(jìn)程查看
2-1、jobs命令(基本不用)
jobs命令:jobs命令用于查看當(dāng)前會(huì)話中的后臺(tái)任務(wù)。它只能顯示當(dāng)前終端中的后臺(tái)進(jìn)程,即與當(dāng)前會(huì)話關(guān)聯(lián)的進(jìn)程。一些常用的jobs參數(shù)如下:
- -l:列出進(jìn)程ID以及任務(wù)狀態(tài)
- -n:僅列出狀態(tài)發(fā)生變化的任務(wù)
- -r:僅列出正在運(yùn)行的任務(wù)
- -s:僅列出已停止的任務(wù)
例如,使用jobs -l命令可以查看當(dāng)前會(huì)話中的后臺(tái)任務(wù)及其進(jìn)程ID。
2-2、ps命令
ps命令:ps命令用于報(bào)告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)。與jobs命令不同,ps可以顯示所有用戶的進(jìn)程信息,而不僅僅是當(dāng)前會(huì)話。一些常用的ps參數(shù)如下:
- -A:顯示所有進(jìn)程
- -u:按用戶顯示進(jìn)程,顯示進(jìn)程的詳細(xì)信息,包括用戶、進(jìn)程號(hào)、CPU 占用、內(nèi)存占用等信息。
- -x:顯示無控制終端的進(jìn)程
- -e:顯示環(huán)境變量
- -aux: 顯示所有進(jìn)程的詳細(xì)信息,包括用戶、進(jìn)程號(hào)、占用 CPU 和內(nèi)存等信息。(一般直接使用aux就可以)
例如,使用ps -A命令可以查看系統(tǒng)中的所有進(jìn)程。要查找特定進(jìn)程,可以將輸出通過管道傳遞給grep命令,如ps -A | grep my_script.sh。
2-3、top命令
top命令:top命令提供了一個(gè)實(shí)時(shí)動(dòng)態(tài)的進(jìn)程監(jiān)視器。它可以查看系統(tǒng)中所有進(jìn)程的實(shí)時(shí)狀態(tài),并根據(jù)資源占用對(duì)進(jìn)程進(jìn)行排序。在top界面中,你可以看到進(jìn)程ID、用戶、CPU占用、內(nèi)存占用等信息。
要查找特定進(jìn)程,可以在top界面中按u鍵,輸入用戶名以篩選該用戶的進(jìn)程。此外,你還可以按o鍵,然后輸入篩選條件,如COMMAND=my_script.sh。按回車鍵確認(rèn),top將僅顯示與條件匹配的進(jìn)程。最后,按ctrl+c退出預(yù)覽。
三、終止進(jìn)程
3-1、進(jìn)程終止概念介紹
進(jìn)程終止指的是一個(gè)正在運(yùn)行的進(jìn)程結(jié)束其執(zhí)行的過程。進(jìn)程終止可以是正常的(例如,進(jìn)程完成了它的任務(wù),或者用戶通過操作系統(tǒng)的接口請(qǐng)求終止進(jìn)程),也可以是非正常的(例如,進(jìn)程崩潰或遇到錯(cuò)誤)。以下是關(guān)于進(jìn)程終止的一些詳細(xì)信息:
-
正常終止:當(dāng)一個(gè)進(jìn)程完成了它的任務(wù)并且正常退出時(shí),它會(huì)通知操作系統(tǒng),操作系統(tǒng)會(huì)將進(jìn)程標(biāo)記為“已退出”。這時(shí)操作系統(tǒng)會(huì)釋放進(jìn)程所占用的內(nèi)存、關(guān)閉與進(jìn)程相關(guān)的文件等資源,并將進(jìn)程的退出代碼(一個(gè)整數(shù)值)返回給父進(jìn)程。父進(jìn)程可以通過讀取這個(gè)退出代碼來確定進(jìn)程完成的狀態(tài)。如果父進(jìn)程沒有及時(shí)調(diào)用wait()或waitpid()函數(shù)來獲取退出狀態(tài),那么進(jìn)程會(huì)成為“僵尸進(jìn)程”,直到父進(jìn)程獲取到退出狀態(tài)或者父進(jìn)程本身終止。
-
非正常終止:當(dāng)一個(gè)進(jìn)程遇到錯(cuò)誤或者崩潰時(shí),它可能會(huì)被操作系統(tǒng)強(qiáng)制終止。例如,如果進(jìn)程發(fā)生了段錯(cuò)誤(訪問了未分配的內(nèi)存),或者進(jìn)程超過了允許的資源限制(如內(nèi)存限制或時(shí)間限制),那么操作系統(tǒng)會(huì)終止這個(gè)進(jìn)程并向其父進(jìn)程報(bào)告錯(cuò)誤信息。在這種情況下,父進(jìn)程可以通過調(diào)用wait()或waitpid()函數(shù)來獲取進(jìn)程終止的狀態(tài)。
-
信號(hào)終止:操作系統(tǒng)可以向進(jìn)程發(fā)送信號(hào)來終止進(jìn)程。例如,如果用戶在命令行中按下Ctrl+C,操作系統(tǒng)會(huì)向正在運(yùn)行的進(jìn)程發(fā)送SIGINT信號(hào),告訴它終止執(zhí)行。進(jìn)程可以捕獲這些信號(hào)并采取適當(dāng)?shù)拇胧?,例如,保存進(jìn)度并安全地終止執(zhí)行。如果進(jìn)程沒有捕獲這些信號(hào),那么操作系統(tǒng)會(huì)默認(rèn)終止進(jìn)程,并向其父進(jìn)程報(bào)告錯(cuò)誤信息。
總之,進(jìn)程終止是一個(gè)非常重要的概念,對(duì)于操作系統(tǒng)的穩(wěn)定性和安全性具有至關(guān)重要的作用。了解進(jìn)程終止的原因和機(jī)制,可以幫助我們更好地理解操作系統(tǒng)的工作原理,從而更好地開發(fā)和調(diào)試應(yīng)用程序。
3-2、kill命令介紹
kill 命令用于終止指定的進(jìn)程。常見的選項(xiàng)包括:
- -9:強(qiáng)制終止進(jìn)程,相當(dāng)于發(fā)送 SIGKILL 信號(hào)。
- -15(默認(rèn)選項(xiàng)):正常終止進(jìn)程,相當(dāng)于發(fā)送 SIGTERM 信號(hào)。
例如,要?dú)⑺肋M(jìn)程號(hào)為 12345 的進(jìn)程,可以使用以下命令:
# 使用top、ps等命令查看進(jìn)程號(hào)
kill 12345
這將向進(jìn)程號(hào)為 12345 的進(jìn)程發(fā)送 SIGTERM 信號(hào),使其正常終止。
如果進(jìn)程無法正常終止,可以使用 -9 選項(xiàng)強(qiáng)制終止進(jìn)程。例如:
kill -9 12345
這將向進(jìn)程號(hào)為 12345 的進(jìn)程發(fā)送 SIGKILL 信號(hào),使其強(qiáng)制終止。
需要注意的是,殺死進(jìn)程可能會(huì)導(dǎo)致未保存的數(shù)據(jù)丟失或其他不可預(yù)知的后果。在使用 kill 命令時(shí),應(yīng)該盡量避免誤殺進(jìn)程,確保只殺死必要的進(jìn)程。文章來源:http://www.zghlxwxcb.cn/news/detail-690296.html
總結(jié)
知識(shí)點(diǎn)增加了!文章來源地址http://www.zghlxwxcb.cn/news/detail-690296.html
到了這里,關(guān)于高效管理 Linux 進(jìn)程:如何后臺(tái)執(zhí)行程序、查看進(jìn)程、終止任務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!