Linux 任務後臺執行軟體【即:終端複用器】之---screen

暮良文王發表於2020-05-29

會話:

命令列的典型使用方式是,開啟一個終端視窗(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

相關文章