wiki:waue/2009/0610

Version 8 (modified by waue, 15 years ago) (diff)

--

Linux技巧:使用screen管理console命令

動機

  • 當遠端登入時,執行命令到一半,不想等了,中斷掉登入的連線,比如說關掉putty或ssh,執行到一半的程序還會跑嗎? ...顯然,答案是:不會!
  • 還有當遠端登入一台機器後,如果需要在視窗內常常查閱數個程序的資訊,比方我要編輯一個abc.sh,編輯時想馬上執行這個abc.sh這隻程式,同時還要執行top觀看系統狀態。如此一來,傳統的作法是,開三個視窗每個視窗都各進行登入程序到主機。但隨後又想看開的port,或不想離開該命令,卻想執行其他指令時,是否又要再新增一個登入的連線,不斷的輸入帳號密碼!
  • 因此用screen 可以解決上面的問題

優點

  • 使用screen可以解決SIGHUP問題
  • 利用screen這種功能來管理你的遠程會話,保存你所有的工作內容。

範例演練

定義: C-a :=> Ctrl+ a

  • 用screen 開啟一個場景,中間離開後,利用-ls查看編號名稱,再用-r 回到場景
    $ screen vi /tmp/abc
    
    $ C-a d
    [detached]
    
    $ screen -ls
    There is a screen on:
    
    	11720.pts-4.vpro	(Detached)
    
    1 Socket in /var/run/screen/S-waue.
    
    
    $ screen -r 11720
    
  • -dmS可以在背景產生一個被命名的場景,場景編號就是pid,因此可以用kill -9 來刪除,而被刪除的場景,會成線removed狀態,可以透過-wipe清除
    $ screen -dmS mygdb gdb execlp_test
    
    $ screen -dmS mytest
    
    $ screen -ls
    There are screens on:
    	11897.mytest	(Detached)
    	11889.mygdb	(Detached)
    	11720.pts-4.vpro	(Detached)
    
    $ kill -9 11889
    $ screen -ls
    
    There are screens on:
    	11897.mytest	(Detached)
    	11889.mygdb	(Dead ???)
    	11720.pts-4.vpro	(Detached)
    
    $ screen -ls
    
    There are screens on:
    	11897.mytest	(Detached)
    	11720.pts-4.vpro	(Detached)
    

補充

進入screen 後的控制命令

C-a ? 顯示所有鍵綁定信息
C-a w 顯示所有窗口列表
C-a C-a 切換到之前顯示的窗口
C-a c 創建一個新的運行shell的窗口並切換到該窗口
C-a n 切換到下一個窗口
C-a p 切換到前一個窗口(與C-a n相對)
C-a 0..9 切換到窗口0..9
C-a a 發送 C-a到當前窗口
C-a d 暫時斷開screen會話
C-a k 殺掉當前窗口
C-a [ 進入拷貝/回滾模式

screen 常用的選項

-c file 使用配置文件file,而不使用默認的$HOME/.screenrc
-d 不開啟新的screen會話,而是斷開其他正在運行的screen會話
-h num 指定歷史回滾緩衝區大小為num行
-ls 列出現有screen會話,格式為pid.tty.host
-d 啟動一個開始就處於斷開模式的會話
-S sessionname 創建screen會話時為會話指定一個名字
-v 顯示screen版本信息
-wipe [match] 同-list,但刪掉那些無法連接的會話