文章目錄
簡介
簡單來講,SSH或Secure Shell是一種遠程訪問其餘系統上的另外一個用戶的方法,但只能在命令行即非GUI模式下進行。當咱們在遠程計算機上運行命令時,它實際上會建立一個僞終端,並將其附加到登陸用戶的登陸shell中。
當咱們退出會話或會話閒置一段時間後超時時,SIGHUP信號將發送到僞終端,而且中止在該終端上運行的全部任務。
但有時候咱們須要程序保持在服務器上運行,此時就須要斷開鏈接後保持程序運行這一技巧了。
一個經常使用的命令ps -ef | grep xxx
,用於查詢當前進程。如查詢python執行的程序$ ps -ef | grep python
python
linux進程
Normal Proces
正常進程是指具備會話壽命的過程。它們在會話期間做爲前臺進程啓動,並在特定時間段內或會話註銷後結束。這些進程的全部者是系統的任何有效用戶,包括root。linux
Orphan Process
父進程建立進城後,父進程意外終止,從而使init成爲該進程的父進程。這樣的進程將init做爲其直接父級,init等待這些進程死亡或結束。shell
Daemon Process
此類進程是一些故意孤立的進程,這些故意留在系統上運行的進程稱爲守護程序或故意孤立的進程。
此類進程一般是長時間運行的進程,一旦啓動,便會與任何控制終端分離,以便它們能夠在後臺運行,直到沒法完成,不然最終會引起錯誤。這些進程的父進程有意終止,以便子進程在後臺執行。
bash
保持ssh session在斷開鏈接後保持運行的五種方法
1. 使用screen session
screen是 Linux 的文本窗口管理器,它容許用戶服務器
- 同時管理多個終端會話
- 在會話之間切換
- 記錄會話運行的輸出結果
- 隨時恢復會話,而沒必要擔憂會話被註銷或終端關閉。
screen sessions能夠在啓動後從控制終端分離,從而在後臺運行,並能夠隨時在任何地點恢復。啓動screen session後可將其從僞終端(或控制終端)中分離出來。以後從新登陸時恢復會話查看運行結果。
步驟
session
- 啓動screen session:(鏈接服務器,)bash鍵入
screen
- 此時bash的命令已經不會由於關閉bash而中斷
- 鍵入
Ctrl+a then d
來分離這一段輸入的命令。
此時你能夠安心關閉遠程鏈接了 - (從新登陸服務器)使用
screen -r
從新打開你的screen session
幾個screen經常使用命令ssh
命令 | 說明 |
---|---|
screen | 建立一個screen session |
screen -ls | 列舉當前screen session |
screen -list | 同上 |
screen -r [session] | 恢復screen session並顯示期間輸出 |
ctrl+ a+ d | 退出當前screen session |
screen -X -S [session] kill | kill某個screen session |
screen -X -S [session] quit | 完全kill某個screen session |
screen -S session -X quit | 同上 |
2. 使用Tmux(Terminal Multiplexer)
詳細瞭解Tmux用法移步here
Tmux 做爲screen的替代品而生,它具備screen的大部分功能且進行了必要而少許的功能增添,這使得它輕便而強大。
除了screen提供的全部選項,Tmux容許在多個窗口之間水平或垂直拆分窗格、調整窗口窗格的大小、會話活動監視、使用命令行模式編寫腳本等。因爲 Tmux 的這些功能十分好用,幾乎全部 Unix 發行版普遍內嵌了Tmux。
步驟
ide
- 啓動Tmux session:(鏈接服務器,)bash鍵入tmux
- 此時bash的命令已經不會由於關閉bash而中斷
- 使用
tmux detach
或Ctrl+b then d
來分離這一段輸入的命令。
此時你能夠安心關閉遠程鏈接了 - (從新登陸服務器)使用
tmux attach
從新打開你的screen session
3. 使用nohup命令
使用 nohup 命令,咱們告訴進程忽略 ssh 會話在終止時發送的 SIGHUP 信號,從而使命令即便在會話註銷後仍會保留。在會話註銷時,該命令從控制終端中分行,並做爲守護進程在後臺繼續運行。
語法:
ui
nohup your_command &
回車後會給出一個id,重登陸時使用fg %your_id
來進入以前的sessionspa
4. 使用disown命令
disdown從系統的流程session列表中刪除當前session,所以進程在bash關閉後不會被終止,由於它不會收到 shell 的 SIGHUP。
此方法的缺點是程序不能與stdin和 stdout交互(固然你能夠重定向輸入和輸出),當session嘗試與 stdin 或 stdout 交互時,進程就會中止。
語法:
diswon your_command
4. 使用setsid命令
能夠認爲setsid時nohup命令的改良版本。nohup 有一個缺點——執行命令的進程組不變,所以使用 nohup 執行的命令容易受到影響,而setsid命令的進程組時能夠變化的,規避了nohup的缺點。
語法與nohup相似。
語法:
setsid your_command
須要說明的是,nohup, disdown, setsid均可以重定向輸入輸出。