linux技巧-使用screen管理你的遠(yuǎn)程會(huì)話
當(dāng)我們用ssh或是telent遠(yuǎn)程登錄到linux服務(wù)器上,運(yùn)行一些長時(shí)間的任務(wù),必須等待任務(wù)完成才能離開該界面。在此期間不能關(guān)閉窗口或者斷開連接。否則這個(gè)任務(wù)的進(jìn)程就會(huì)別殺掉,一切半途而廢,需要重新執(zhí)行該任務(wù)。
如何解決這個(gè)問題?
首先來理解幾個(gè)概念:
進(jìn)程組:一個(gè)或多個(gè)進(jìn)程的集合,每個(gè)進(jìn)程組有唯一一個(gè)進(jìn)程組ID,即進(jìn)程組長進(jìn)程的ID
會(huì)話期:一個(gè)或多個(gè)進(jìn)程組的集合,有唯一一個(gè)會(huì)話期首進(jìn)程,會(huì)話期ID為首進(jìn)程的ID
會(huì)話期可以有一個(gè)單獨(dú)的控制終端,與控制終端連接的會(huì)話期首進(jìn)程叫控制進(jìn)程,當(dāng)前與終端交互的進(jìn)程為前臺(tái)進(jìn)程。
掛斷信號(hào)默認(rèn)的動(dòng)作為終止程序
當(dāng)終端借口檢測到網(wǎng)絡(luò)連接斷開,將掛斷信號(hào)發(fā)送給控制進(jìn)程
如果會(huì)話期首選進(jìn)程終止,則該信號(hào)發(fā)送到該會(huì)話期前臺(tái)進(jìn)程組
一個(gè)進(jìn)程退出導(dǎo)致一個(gè)孤兒進(jìn)程組中產(chǎn)生時(shí),如果任意一個(gè)孤兒進(jìn)程組處于stop狀態(tài),發(fā)送SIGHUP和SIGCONT信號(hào)到該進(jìn)程組的所有進(jìn)程。
因此,當(dāng)網(wǎng)絡(luò)斷開或終端窗口關(guān)閉后,控制進(jìn)程收到SIGHUP信號(hào)退出,會(huì)導(dǎo)致該會(huì)話期內(nèi)其他進(jìn)程退出
方法一:nohup
#nohup command &
方法二:screen
creen 是一個(gè)可以在多個(gè)進(jìn)程間多路復(fù)用一個(gè)物理終端的窗口管理器。
使用方法:
(1),[xuefeng@ku6]# screen
screen將創(chuàng)建一個(gè)執(zhí)行shell的全屏窗口,你可以執(zhí)行任意shell,就像在ssh窗口一樣。
(2),[xuefeng@ku6]#screen vi abc
screen創(chuàng)建一個(gè)執(zhí)行vi abc的單獨(dú)窗口會(huì)話,退出vi 將退出該窗口
(3),還可以在已有screen會(huì)話窗口中創(chuàng)建新的窗口,在當(dāng)前sceen窗口中鍵入C-a c,即Ctrl+a,再按下c鍵。重新控制各窗口中運(yùn)行的程序。
例如:在一個(gè)screen窗口中編輯vi /tmp/abc,之后需要作另外的事情,那么可以在screen窗口鍵入C-a d,screen會(huì)提示暫時(shí)中斷會(huì)話。繼續(xù)前一個(gè)會(huì)話,#screen -ls 查看會(huì)話編號(hào)。重新連接screen -r 編號(hào)。