2014年2月19日 星期三

[Linux] screen的使用

最近因為專案需要跑大型數據模擬,常需要跑來中研院這邊登錄他們的server做simulation,
有時候模擬跑起來要很久很久,
如果程式沒結束就退出遠端,正在run的程式可能就會當掉,
因此藉機學到了Linux中強大的screen功能!
screen是linux上一個很好用的功能,可以在一個terminal下開啟多個視窗執行,又可以彼此切換,藉由每一個process的PID去modified,
簡單來說,又可以多分頁工作,又可以離線後繼續工作,如此好物,怎能不學!

screen的簡易指令:
screen      #第一次執行會創立一個running SHELL的單一視窗
            #(open a screen session for processing)
ctrl+a+c    #開啟下一個新的單一視窗並切換過去(change to new worker)
ctrl+a+d    #脫離(detach)目前的 screen ,並放到背景執行(jump out of screen),
            #離線繼續工作的強大指令,要在連上只需使用screen -r PID即可
screen -r PID    #選擇一個screen session 進入該程序
screen -ls       #查看所有screen sessions(show the screen working status)
kill PID         #kill process
說明:
平常工作寫或跑到一半就可以把它detach掉,丟到後臺執行後會回到還沒進screen的狀態,此時process其實都還在執行,就算logout也不會停止。
要在連上執行中的process,只要在login後,用screen -ls查看process的PID,在用screen -r PID即可回復該程序!
程序結束後,也只要用kill PID就可以跟該程序說bye bye嚕!

補充:
screen -R      #重新連接最近卸離的 screen 工作環境
screen -d PID  #強制 detach,以便「接手」過來
screen -wipe   #將廢棄的 screen 工作環境清除
exit           #關閉視窗(若只剩一個視窗則為關閉screen, close the screen)
top            #linux中的動態程序觀察功能,查看遠端主機終有哪些程序在執行
               #(leave top->press "q")
補充2:
ctrl+a+n       #Next == 切換到下個 window
ctrl+a+p       #Previous == 前一個 window
ctrl+a ctrl+a  #Other == 在兩個 window 間切換
ctrl+a+w       #Windows == 列出已開啟的 windows 有那些
ctrl+a+0       #切換到第 0 個 window
ctrl+a+1..9    #切換到第 1..9 個window
ctrl+a+a       #發出 C-a,在 emacs, ve, bash, tcsh 下可移到行首
ctrl+a+t       #Time,顯示當前時間,和系統的 load
ctrl+a+K(大寫)  #kill window,強行關閉當前的 window
ctrl+a+[       #進入 copy mode,在 copy mode 下可以回滾、搜索、複製就像用使用 vi 一樣
ctrl+b+Backward  #PageUp
ctrl+f+Forward   #PageDown