screen命令 | tee命令

screen命令

通常,在遠程終端窗口開一個任務,若在它執行期間不慎關掉窗口或者斷開連接,那這個任務就會被殺掉,一切半途而廢了。

Screen是一個可以在多個進程之間多路複用一個物理終端的窗口管理器。Screen中有會話的概念,用戶可以在一個screen會話中創建多個screen窗口,在每一個screen窗口中就像操作一個真實的telnet/SSH連接窗口那樣。創建screen窗口的方法有:

1. 直接在命令行鍵入screen命令

[sjy@xxx ~]$ screen

2. Screen命令+要執行的程序(創建一個執行vim test.txt的新窗口會話,退出vim會退出該窗口/會話)

[sjy@xxx ~]$ screen vim test.txt

3. 最常用的是,Screen建立一個自定義名稱的窗口會話

[sjy@xxx ~]$ screen -R myname

screen常用選項及示例

-d <作業名稱>  將指定的screen作業離線。 
-r <作業名稱>  恢復離線的screen作業。 
-R             先試圖恢復離線的作業。若找不到離線的作業,即建立新的screen作業。 
-s             指定建立新視窗時,所要執行的shell。 
-S <作業名稱>  指定screen作業的名稱。
-v           顯示版本信息。 
-x           恢復之前離線的screen作業。 
-ls或--list  顯示目前所有的screen作業。 
-wipe        檢查目前所有的screen作業,並刪除已經無法使用的screen作業。
screen -S yourname       -> 新建一個叫yourname的session 
screen -ls               -> 列出當前所有的session 
screen -r yourname       -> 回到yourname這個session
screen -d yourname       -> 遠程detach某個session
screen -XS yourname quit -> 刪除yourname這個detached的session(wipe刪不掉的)

給screen窗口發送的常用命令【C-a是Ctrl+A的快捷鍵】

C-a c  -> 創建一個新的運行shell的窗口並切換到該窗口 
C-a n  -> Next,切換到下一個 window 
C-a p  -> Previous,切換到前一個 window 
C-a d  -> detach,暫時離開當前session,將目前的 screen session (可能含有多個 windows) 丟到後臺執行,並會回到還沒進 screen 時的狀態,此時在 screen session 裏,每個 window 內運行的 process (無論是前臺/後臺)都在繼續執行,即使 logout 也不影響。 
C-a k  -> kill window,強行關閉當前的 window

SIGHUP 信號:爲什麼關掉窗口/斷開連接會使得正在運行的遠端程序死掉

在Linux/Unix中,有這樣幾個概念:

· 進程組(process group):一個或多個進程的集合,每一個進程組有唯一一個進程組ID,即進程組長進程的ID。

· 會話期(session):一個或多個進程組的集合,有唯一一個會話期首進程(session leader)。會話期ID爲首進程的ID。

會話期可以有一個單獨的控制終端。與控制終端連接的會話期首進程叫做控制進程。當前與終端交互的進程稱爲前臺進程組。其餘進程組稱爲後臺進程組。

掛斷信號(SIGHUP)默認的動作是終止程序。當終端接口檢測到網絡連接斷開,將掛斷信號發送給控制進程(會話期首進程)。如果會話期首進程終止,則該信號發送到該會話期前臺進程組。一個進程退出導致一個孤兒進程組中產生時,如果任意一個孤兒進程組進程處於STOP狀態,發送SIGHUP和SIGCONT信號到該進程組中所有進程。

因此當網絡斷開或終端窗口關閉後,控制進程收到SIGHUP信號退出,會導致該會話期內其他進程退出。


tee命令

說明:tee命令會從標準輸入設備讀取數據,將其內容輸出到標準輸出設備,同時保存成文件。
參數: -a 或 --append  附加到既有文件的後面,而非覆蓋它。
         -i-i 或 --ignore-interrupts  忽略中斷信號。
           --version  顯示版本信息。

[sjy@xxx ~]$pwd | tee a.out
/home/sjy
[sjy@xxx ~]$cat a.out
/home/sjy

創建一個視窗用於在後臺執行程序,並將打印到視窗屏幕上的內容保存成文件,供後期查看。

[sjy@xxx ~]screen -S mysession | ./myprogram.sh | tee myprogram.log




發佈了71 篇原創文章 · 獲贊 98 · 訪問量 42萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章