會話:
命令列的典型使用方式是,開啟一個終端視窗(terminal window,以下簡稱"視窗"),在裡面輸入命令。
使用者與計算機的這種臨時的互動,稱為一次"會話"(session) 。
會話的一個重要特點是,視窗與其中啟動的程式是連在一起的。開啟視窗,會話開始;關閉視窗,會話結束,會話內部的程式也會隨之終止,不管有沒有執行完。
一個典型的例子就是,SSH 登入遠端計算機,開啟一個遠端視窗執行命令。這時,網路突然斷線,再次登入的時候,是找不回上一次執行的命令的。因為上一次 SSH 會話已經終止了,裡面的程式也隨之消失了。
為了解決這個問題,會話與視窗可以"解綁":視窗關閉時,會話並不終止,而是繼續執行,等到以後需要的時候,再讓會話"繫結"其他視窗。
作用:
Screen 就是會話與視窗的"解綁"工具,將它們徹底分離。
功能:
- 會話恢復
只要Screen本身沒有終止,在其內部執行的會話都可以恢復。這一點對於遠端登入的使用者特別有用——即使網路連線中斷,使用者也不會失去對已經開啟的命令列會話的控制。只要再次登入到主機上執行screen -r就可以恢復會話的執行。同樣在暫時離開的時候,也可以執行分離命令detach,在保證裡面的程式正常執行的情況下讓Screen掛起(切換到後臺)。這一點和圖形介面下的VNC很相似。
- 多視窗
在Screen環境下,所有的會話都獨立的執行,並擁有各自的編號、輸入、輸出和視窗快取。使用者可以通過快捷鍵在不同的視窗下切換,並可以自由的重定向各個視窗的輸入和輸出。Screen實現了基本的文字操作,如複製貼上等;還提供了類似滾動條的功能,可以檢視視窗狀況的歷史記錄。視窗還可以被分割槽和命名,還可以監視後臺視窗的活動。
- 會話共享
Screen可以讓一個或多個使用者從不同終端多次登入一個會話,並共享會話的所有特性(比如可以看到完全相同的輸出)。它同時提供了視窗訪問許可權的機制,可以對視窗進行密碼保護。
使用:
安裝
一般的linux系統都會自帶screen,如果沒有安裝的話,ubuntu使用:
$ sudo apt-get install screen
新建視窗
新建一個視窗有3種方法:
1、$ screen #這樣就可以新建視窗,進入到一個視窗中,但是這樣視窗就沒有名字,無法區分他們
2、$ screen -S name #這樣新建一個名字為name的視窗,併入到該視窗中
例如:screen -S count 新建了一個叫count的視窗並進入
3、$ screen command #這樣新建一個視窗並在視窗中執行command,同樣沒有名字
例如:screen python ./a.py 新建並執行a.py程式
會話分離
我們在一個視窗執行某個程式之後,想退出登入關閉terminal乾點別的事,讓程式在後臺執行。這時就需要和視窗會話分離,有2種方式:
1)快捷鍵Ctrl a表示進入命令模式
在當前會話視窗中按Ctrl+ a +d快捷鍵可以實現分離,這時視窗會彈出[detached]的提示,並回到主視窗。
2)screen -d name #遠端detach某個session,前提是已經跳出了name視窗
恢復會話視窗
首先檢視有哪些視窗正在執行
$ screen -ls # 列出視窗列表
There is a screen on:
2637.count (12/17/2015/10:00:32 AM) (Detached)
$ screen -r 2637 #進入2637執行緒,恢復count會話視窗,這樣就能回到count視窗了
因為起了名字,可直接用名字恢復:
$ screen -r 會話名字
殺死會話視窗
如果想關掉一個多餘的視窗,有3種方法:
kill -9 threadnum 例如在上面的2637,kill -9 2637 即可殺死執行緒,當然就殺死了視窗
Ctrl a +k # 殺死當前視窗和視窗中執行的程式
使用Ctrl a 然後輸入quit命令退出Screen會話。需要注意的是,這樣退出會殺死所有視窗並退出其中執行的所有程式
清除死去的視窗
當視窗被殺死後,再用screen -ls 可以看到該視窗後面的(???dead)字樣,說明視窗死了,但是仍在佔用空間。這時需要清除視窗
$ screen -wipe #自動清除死去的視窗
總結:
基本常用命令:
(1)screen -S xxx 建立名為xxx的新視窗
(2)screen -ls 檢視所有會話
(3)screen -r xxx 恢復建立的xxx視窗
(4)ctrl + a + d 會話分離
(5)screen -wipe 清除Dead的視窗
更多screen高階功能:
http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html