多種方式讓Linux進(jìn)程后臺穩(wěn)定運(yùn)行
我們經(jīng)常會遇到這樣的問題,遠(yuǎn)程登錄到Linux服務(wù)器后,執(zhí)行一些耗時較長的任務(wù),但由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致任務(wù)中途失敗。為了確保命令在后臺穩(wěn)定運(yùn)行,我們可以采用不同的方法來處理這個問題。 場景:臨時需要長
我們經(jīng)常會遇到這樣的問題,遠(yuǎn)程登錄到Linux服務(wù)器后,執(zhí)行一些耗時較長的任務(wù),但由于網(wǎng)絡(luò)不穩(wěn)定導(dǎo)致任務(wù)中途失敗。為了確保命令在后臺穩(wěn)定運(yùn)行,我們可以采用不同的方法來處理這個問題。
場景:臨時需要長時間運(yùn)行的命令
如果只是臨時有一個命令需要長時間運(yùn)行,有哪些簡便的方法可以保證它在后臺穩(wěn)定運(yùn)行呢?
1. nohup
nohup的作用就是讓提交的命令忽略hangup信號。使用nohup非常方便,只需要在要處理的命令前加上nohup即可。標(biāo)準(zhǔn)輸出和標(biāo)準(zhǔn)錯誤會被重定向到nohup.out文件中。我們還可以通過在命令末尾加上""將命令放入后臺運(yùn)行,或者使用"> filename 2>1"來更改重定向文件名。
示例:
nohup ping amp;
2. setsid
setsid命令可以使我們的進(jìn)程不屬于接受hangup信號的終端的子進(jìn)程,從而避免受到hangup信號的影響。使用setsid也非常方便,只需在要處理的命令前加上setsid即可。
示例:
setsid ping
值得注意的是,使用setsid命令后,我們的進(jìn)程的父ID(PPID)將變?yōu)?,即init進(jìn)程的PID,并不是當(dāng)前終端的進(jìn)程ID。
3. 使用subshell
將一個或多個命令包含在“()”中,可以讓這些命令在一個子shell中運(yùn)行。當(dāng)我們將""也放入“()”內(nèi)之后,所提交的作業(yè)將無法通過jobs命令查看,也就是說,不受當(dāng)前終端的hangup信號影響。
示例:
(ping amp;)
通過使用不同的方法,我們可以確保長時間運(yùn)行的命令在后臺穩(wěn)定運(yùn)行,不受本地關(guān)閉終端窗口或網(wǎng)絡(luò)斷開連接的干擾。