Linux運行程式時,程式行程莫名退出(被殺死)
1.知識點
1)Linux程式行程被殺,日志突然中止,可以考慮是否因為程式占用記憶體過高,導致系統記憶體不足,為避免系統崩潰,系統尋找記憶體占用最大的行程kill掉
2)也可能存在運行程式時沒有使用nohup ( no hang up) command &將行程提交到后臺運行,一旦控制臺關閉,任務行程就會停止運行
3)補充 Ctrl+c ctrl + z 區別
2.問題排查
1)排查是否因為程式問題導致系統記憶體占用過高而被系統主動殺死,通過查看Linux 系統日志的方式查看,
如果日志中存在 Out of memory: Kill process等關鍵詞則說明行程被系統主動殺死
# 通過以下三種命令查看系統是否主動殺死程式行程
dmesg | egrep -i -B100 'killed process'
## 或:
egrep -i 'killed process' /var/log/messages
egrep -i -r 'killed process' /var/log
## 或:
journalctl -xb | egrep -i 'killed process'
2)對應沒有使用nohup command &的情況
排查在Linux環境下運行程式時有沒有使用nohup command &命令,將行程提交Linux后臺中運行,并且在使用nohup命令時,退出服務器終端連接客戶端時有沒有使用 exit命令正常退出
# nohup命令的正常使用語法,&將行程提交到后臺運行,nohup表示退出賬號后行程進行執行,不掛起
nohup command &
3.解決
1)對于程式占用系統記憶體太大,導致系統主動殺死程式行程的情況,應該主動排查程式中代碼是否存在迭代,回圈或者記憶體泄露的可能,從代碼的角度對程式重構,
2)對于沒有正確使用nohup命令導致的行程例外退出,參考如下命令正確的使用nohup將程式放Linux后臺中運行
‘nohup’ 表示不掛起, 即正常退出終端連接也不掛起行程,
‘command’ 表示要運行的后臺行程 例如:sh run.sh
‘>’ 表示重定向 表示將 >左邊的訊息定向輸出>右邊的某個檔案中 例如以下命令將標出輸出重定向到out.log檔案中
‘2>&1’ 是將標準出錯重定向到標準輸出, 2 >代表標準出錯定向 ,&1代表標準輸出
‘&’ 表示將程式行程提交到后臺運行 ,但只使用& 螢屏還是會列印程式相關日志
# 使用如下命令后臺運行程式,out.log為程式日志輸出的目錄 nohup command > out.log 2>&1 & # 使用 exit 命令 正常退出終端 exit
4. 補充命令 ctrl + z Ctrl+c
- ctrl + z
可以將一個正在前臺執行的命令放到后臺,并且處于暫停狀態,- Ctrl+c
終止前臺命令,- jobs
查看當前有多少在后臺運行的命令,
jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated,但是如果任務被終止了(kill),shell 從當前的shell環境已知的串列中洗掉任務的行程標識,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/249844.html
標籤:其他
