關閉shell後讓程式繼續執行的方式

2021-09-27 02:34:11 字數 2117 閱讀 5550

關閉shell後讓程式繼續執行的方式

最近在linux下執行了jmeter測試指令碼,啟動程式後,關閉shell後,然後再登入shell,發現啟動的指令碼停止了,莫名其妙。原來,如果直接執行指令碼,當關閉shell時,啟動的指令碼程序也跟著結束了。

原因:當使用者登出(logout)或者網路斷開時,終端會收到 hup(hangup)訊號從而關閉其所有子程序。

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

nohup和&方式

nohup 的用途就是讓提交的命令忽略** hup(hangup)** 訊號,即忽略掉掛起訊號 ;通過nohup --help命令檢視基本介紹:

nohup的使用比較簡單,只需在命令前加上nohup就可以了,標準輸出和標準錯誤缺省會被重定向到nohup.out檔案中;但是一般可在結尾加上&來將命令同時放入後台執行,還可以新增輸出的重定向到指定的檔案。

示例

# ***.sh是你要執行的命令 > log.txt表示新增輸出的重定向到log.txt檔案

# 2>&1 標準輸出和標準錯誤資訊 &後台執行

[root@izwz9938t1plpkmgu0gexcz ~]

# nohup ***.sh > log.txt 2>&1 &

disown命令

用於命令已經在執行中的情況,但是並沒有忽略掛起訊號的方式,通過disown命令可以避免 hup 訊號的影響。通過ctrl+z將程式掛起到後台暫停執行,然後執行其他操作。分兩種情況,一種是程序已經使用&放到後台執行了的(無需ctrl+z),另外一種是前台執行的情況,即沒有使用&(需要ctrl+z).

使用了&的情況示例

#通過jobs可以檢視被掛起的工作程序

# 使得程序忽略hup訊號,disown -h %1 %1:指的是上面的job號,對應1(第乙個作業).

[root@izwz9938t1plpkmgu0gexcz ~]

# disown -h %1

# 然後logout後,再次登入進去程序依然還在。

未使用&的情況示例

#按ctrl+z後,通過jobs可以檢視被掛起的工作程序

# bg %1將程序放到後台執行

# 使得程序忽略hup訊號,disown -h %1 %1:指的是上面的job號,對應1(第乙個作業).

[root@izwz9938t1plpkmgu0gexcz ~]

# disown -h %1

# 然後logout後,再次登入進去程序依然還在。

SSH斷開後讓程式繼續執行

shell支援作用控制,有以下命令 command 讓程序在後台執行 jobs 檢視當前在後台執行的程序 fg n 讓後台執行的程序n到前台來,這裡的n為job number,不是pid bg n 讓程序n到後台去,或讓後台暫停的程序繼續執行,n同上 ctrl z 將乙個正在前台執行的命令放到後台,...

使用者登出後,程式繼續執行

最近寫了乙個程式,需要在伺服器上執行,編完了以後,到伺服器執行,發現,用遠端登陸開啟這個程式,沒有問題,可是過了十分鐘,遠端伺服器自動登出了,程式也就終止。這樣,程式就不能正常工作。想了一天多的辦法,終於在今天把這個問題解決了。首先用.net寫個服務 新建乙個服務,在設計頁面上點右鍵,出現選單後,選...

讓程式在關閉xshell後仍可以正常執行

xshell關閉後,斷開連線,貌似相當於關機,所以執行的程式會被殺掉,如果要掛程式,這裡推薦使用screen掛後台來執行呢。1.安裝screen,系統ubuntu 18.04 lts,sudo apt install screen如果有問題的話先更新一下軟體源sudo apt update 如果是c...