首頁 >運維 >linux運維 >如何使用Screen管理遠端會話?

如何使用Screen管理遠端會話?

青灯夜游
青灯夜游轉載
2019-03-28 14:20:082350瀏覽

這篇文章帶來的內容是介紹使用Screen管理遠端會話的方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。

在本地開發時,經常需要使用遠端連接到Linux伺服器,一開始我自己都是有幾個遠端就開幾個SSH窗口,這種方法很原始很直接,但每次都受夠了密碼輸入,即使用了SSH免密碼登錄,也會覺得每次輸入SSH的命令一點都不快速,況且況且窗口開多了,也會很混亂,不易管理,這種情況,Linux上的工具也有很多,今天就學習一下screen工具。

在介紹screen工具時,先討論一下,為什麼連接伺服器後,當執行長時間的任務時,我們關閉遠端連線窗口,這個任務就被殺了呢?

元兇:SIGUP訊號

在Linux/Unix中,有以下幾個概念:

  • 進程組(process group):一個或多個進程的集合,每個進程組都有一個唯一的進程組ID;

  • 會話期(session):一個或多個進程組的集合,有唯一一個會話首進程(session leader),會話期ID為首進程ID;

  • 會話期可以有一個單獨的會話終端,與控制終端連線的會話期首進程叫控制進程(controlling process),目前與終端交互的進程稱為前台進程組,其餘進程組稱為後台程序組。

工具POSIX.1定義:

  • #掛斷訊號(SIGHUP)預設的動作是終止程式;

  • 當終端介面偵測到網路連線斷開,將發送SIGHUP訊號給控制進程(會話期首進程);

  • 如果會話期首進程終止,則該訊號傳送到該會話期前台進程組;

  • 一個進程退出導致一個孤兒進程組產生時,如果人一個孤兒進程組進程處於STOP狀態,則發送SIGHUP和SIGCONT信號到該進程組中所有進程。

因此當網路中斷或視窗關閉時,控制進程會收到SIGHUP訊號退出,會導致該會話期間內其他進程退出。

一個簡單範例

開啟兩個SSH終端機窗口,在第一個執行ping指令:

如何使用Screen管理遠端會話?

再另一個終端機視窗中,找到ping的進程ID為22132,其父進程ID為21803,即登入zsh:

如何使用Screen管理遠端會話?

使用ps -xj可以看到,登入zsh(PID 21803)和ping在同一會話期,zsh為會話期首進程,所以進程組PGID為21803 ,ping所在的進程組PGID為22132,為前台進程組。

如何使用Screen管理遠端會話?

這時,我們關閉第一個SSH遠端窗口,在另一個視窗中看到ping進程被殺了:

如何使用Screen管理遠端會話?

這就發現,當我們執行一個耗時的任務時,如果關閉了這個窗口,這個任務進程也就被殺掉了,並不是我們所期望的那樣在後台繼續執行。

使用screen

現在,也不需要多說screen到底是做什麼的了,直接說怎麼使用吧。

1、直接執行screen命令

如何使用Screen管理遠端會話?

#screen將建立一個執行shell的全螢幕窗口,可以看到視窗的title已經提示處於screen程式中,在這個視窗中你可以隨便執行指令,如果要退出輸入exit指令。

2、如果你想新開一個視窗執行另一個任務,可以執行:

// 方法1
按键盘Ctrl+a +c, 会心打开一个screen窗口

// 方法2
screen 需要执行的任务的命令,比如:
screen ping www.baidu.com

3、多個screen視窗切換

方法1
键盘Ctrl+a +[0..9]

方法2
键盘Ctrl+a +n, 下一个screen窗口
键盘Ctrl+a +p, 上一个screen窗口

更多指令可以看下圖:

如何使用Screen管理遠端會話?

如何使用Screen管理遠端會話?

Screen是一個可以在多個進程之間多路復用一個實體終端機的窗口管理器,Screen中還有會話的概念,用戶可以在一個screen會話中創建多個screen窗口,而在每一個screen視窗中就像操作一個真實的SSH連線視窗。

相關影片教學推薦:《Linux教學

以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。更多精彩內容大家可以追蹤php中文網相關教學欄位! ! !

以上是如何使用Screen管理遠端會話?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:cnblogs.com。如有侵權,請聯絡admin@php.cn刪除