Linux 技巧 讓程序在後台可靠執行的幾種方法

2021-09-24 11:50:43 字數 1641 閱讀 3347

linux 技巧:讓程序在後台可靠執行的幾種方法

我們經常會碰到這樣的問題,用ssh登入了遠端的linux伺服器,執行了一些耗時較長的任務,結果卻由於網路等的不穩定導致任務中途失敗。

這是由於在使用者登出(logout)或者網路斷開時,終端會收到 hup(hangup)訊號從而關閉其所有子程序。

解決辦法有兩種:讓程序忽略hup訊號,或讓程序執行在新的會話裡從而成為不屬於此終端的子程序。

下面是對linux下執行與控制後台程序的各種方法的介紹:

1.nohup

顧名思義,nohup的用途就是讓提交的命令忽略所有的hangup訊號。

使用方法:nohup command [arg]...

2.setsid

在乙個新的會話中執行命令,從而可以避開當前終端發出的hup訊號。

使用方法:setsid command [arg]...

3.&

可以結合()產生乙個新的子shell並在這個子shell中將任務放置到後台執行,從而不受當前shell終端的hup訊號影響。

使用方法:(command [arg]... &)

而我通常的使用方式為:

nohup ./filename.sh > filename.log 2>&1 &

三點理由:

1)nohup保障程序不會被hangup訊號異常中斷;

2)將任務放置到後台執行,不占用當前的終端;

3)將錯誤輸出也列印到log中,預設》只有標準輸出,錯誤輸出沒有。

4.控制程序

通過以下命令,我們可以對放入到後台的命令進行控制

檢視當前終端下的後台程序:

直接執行:jobs

將檢視到的某個後台程序放回到前台:

直接輸入:fg //這裡的是通過jobs命令中看到的程序前中的數字。

將當前正在前台執行的程序放到後台執行:

先敲下快捷鍵:ctrl +z //暫停當前正在執行的程序。

再執行:bg

終止當前正在前台執行的程序:

直接敲下快捷鍵:ctrl +c

5.disown

亡羊補牢,為沒有使用nohup與setsid的程序加上忽略hup訊號的功能。

使用方法:

將當前正在前台執行的程序放到後台執行;

然後執行disown -h % //這裡的是通過jobs命令中看到的程序前中的數字。

6.通過screen來實現穩定的後台執行

screen是建立乙個新的全屏虛擬會話終端,這個會話只有在手動輸入exit的時候才會退出,在這個會話裡執行的命令不用擔心hup訊號會對我們的程序造成影響,因此也不用給每個命令前都加上「nohup」或「setsid」了,非常適合我們有規劃的執行大量的後台任務,可以非常方便的讓我們對這些後台任務進行管理。

使用方法:

screen //立即建立並進入乙個會話。

screen -dms //建立乙個處於斷開模式下的會話,並根據我們的需要指定其會話名稱。

screen -list //列出所有會話。

screen -r //進入指定會話。

ctrl +ad //輸入快捷鍵ctrl +a和d,可暫時退出當前會話。

exit //進入指定會話後執行exit即可關閉該會話。

Linux 技巧 讓程序在後台可靠執行的幾種方法

linux 技巧 讓程序在後台可靠執行的幾種方法 linux後台執行命令詳述 其中,f script 是所要提交的指令碼或命令。l 列出當前所有等待執行的作業。a t q命令具有相同的作用。r 清除作業。為了清除某個作業,還要提供相應的作業標識 i d 有些u n i x變體只接受a t r m作為...

Linux 技巧 讓程序在後台可靠執行的幾種方法

1.nohup ping www.ibm.com 2.setsid ping www.ibm.com 3.ping www.ibm.com 4.如果提交命令時未使用 將命令放入後台執行,可使用 ctrl z 和 bg 將其放入後台,再使用 disown disown h 1 nohup setsid...

Linux小 技巧 讓程序在後台可靠執行的幾種方法

我們經常會碰到這樣的問題,用 telnet ssh 登入了遠端的 linux 伺服器,執行了一些耗時較長的任務,結果卻由於網路的不穩定導致任務中途失敗。如何讓命令提交後不受本地關閉終端視窗 網路斷開連線的干擾呢?下面舉了一些例子,您可以針對不同的場景選擇不同的方式來處理這個問題。nohup sets...