Linux 后台运行程序方法总结
??在用服務器跑數據的時候經常會遇到數據量大,速度慢的情況,動不動需要用好幾天甚至上十天,但電腦總不能好幾天不關終端,且保證不斷網吧。所以這時候我們就需要將程序放到后臺運行,不依賴于終端。關于原理,我們知道當用戶注銷(logout)或者網絡斷開時,終端會收到 HUP(hangup)信號從而關閉其所有子進程。因此,我們的解決辦法就有兩種途徑:一是讓進程忽略 HUP 信號,二是讓進程運行在新的會話里從而成為不屬于此終端的子進程。
目錄
?nohup
?disown
?screen
?setsid
?
?
?
nohup
??顧名思義,nohup 的用途就是讓提交的命令忽略 hangup 信號,屬于第一種途徑。我一般是這樣子用:
nohup python -u train_au.py >trian_log 2>&1 &# 注釋 # 格式:nohup command args # > train_log 標準輸出重定向到文件中 # 2>&1 標準錯誤也輸出到文件中 # 最后一個 & 表示加到后臺disown
??有時候我們程序跑起來才發現忘了放后臺運行,這時候怎么辦呢?當然不是看著辦,而是有很好的辦法解決:
# 通過以下操作即可解決ctrl+z # 將程序掛起 jobs # 查看作業號 bg job_id # 放到后臺運行 disown -h %job_idscreen
??這種方法是師兄教我的,Screen是一款由GNU計劃開發的用于命令行終端切換的自由軟件。用戶可以通過該軟件同時連接多個本地或遠程的命令行會話,并在其間自由切換 。使用screen后其是是 init(PID為1)的子進程,這樣也不會受到HUP信號的影響。
screen [-AmRvx -ls -wipe][-d <作業名稱>][-h <行數>][-r <作業名稱>][-s ][-S <作業名稱>]
-A 將所有的視窗都調整為目前終端機的大小。 -d <作業名稱> 將指定的screen作業離線。 -h <行數> 指定視窗的緩沖區行數。 -m 即使目前已在作業中的screen作業,仍強制建立新的screen作業。 -r <作業名稱> 恢復離線的screen作業。 -R 先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。 -s 指定建立新視窗時,所要執行的shell。 -S <作業名稱> 指定screen作業的名稱。 -v 顯示版本信息。 -x 恢復之前離線的screen作業。 -ls或--list 顯示目前所有的screen作業。 -wipe 檢查目前所有的screen作業,并刪除已經無法使用的screen作業。# 常見用法 screen -S name -> 新建一個叫name的session screen -dms name ->創建一個detach的session screen -ls -> 列出當前所有的session screen -r name -> 回到name這個session screen -d name -> 遠程detach某個session # CTRL-a d快捷鍵終端當前Session screen -d -r name -> 結束當前session并回到name這個sessionsetsid
??屬于第二種策略,進程不屬于接受 HUP 信號的終端的子進程,那么自然也就不會受到 HUP 信號的影響。
setsid # set session id Usage: setsid [options] <program> [arguments ...]Run a program in a new session.Options:-c, --ctty set the controlling terminal to the current one-w, --wait wait program to exit, and use the same return-h, --help display this help and exit-V, --version output version information and exitsetsid python train.py總結
以上是生活随笔為你收集整理的Linux 后台运行程序方法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matplotlib(五)排版布局
- 下一篇: python re 正则表达式