這個問題困擾一些新手。這裡推薦使用這個screen工具, 根據筆者理解, 它就是通過保存終耑連接的會話臨時存儲爲session來實現的終耑會話持久化。
用yum或apt工具安裝screen
# centos系列用這個命令安裝 yum install screen # debian或者烏班圖用apt工具來安裝 apt-get install screen
screen使用方法
創建一個終耑會話:
screen -S 這裡填寫會話名稱
這個命令也可以省略到-S, 此時會建立一個隨機名稱的終耑會話。
列舉出現在所有的session會話
screen -ls
恢複一個終耑會話
screen -r 之前你創建過的會話名稱
銷毀一個終耑會話的方法
用screen -ls拿到會話列表, 並用kill命令+進程號的方式殺死列表裡對應的會話進程。
會話session明明存在, 但無法用screen -r來恢複
假如你之前強行關閉了screen有關的終耑窗口, 會導致名爲screen -r xxxx的命令進程仍然在系統進程表裡, 此時這個session id會被screen認爲是“被佔用”的。
你打開兩個終耑窗口,其中一個窗口連著screen, 另一個窗口也嘗試用screen -r命令同時訪問這個會話, 也可以複現這個故障。報錯如下:
There is a screen on: XXXX.pts-n.xxxxxxxxxx (01/01/03 xx:xx:xx)(Attached) There is no screen to be resumed matching XXXX.
解決問題的方法是加一個參數-d, 強行銷毀之前的會話, 以介入你的目標會話:
screen -r -d <會話ID>
除了screen以外, 也有一個比較方便的實現單個命令掛起到後台的方法, 讓你不必擔心退出終耑影響命令的執行, 叫做disown, 傳送門 https://www.wkwkk.com/articles/d09914ce12105ae6.html
screen會話session無法顯示中文, 全是亂碼問號
編輯器編輯.screenrc文档
vim ~/.screenrc
替換内容如下
defutf8 on defencoding utf8 encoding UTF-8