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