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