咱們常常用ssh鏈接遠程linux服務器進行管理和運行程序等,咱們會發現,當咱們把終端界面退出後,咱們經過這個終端執行的程序,無論是在前臺運行,仍是已經經過&
掛在了後臺運行的程序,都會由於在退出終端的過程當中,發出的SIGHUP
信號而退出,有時候咱們但願咱們即便是退出了終端,某個程序也須要一直運行下去,那麼咱們能夠採起如下兩種方法。html
若是咱們有服務器的root權限,咱們能夠安裝tmux
,命令如:
sudo apt-get install tmux
安裝完以後,咱們須要在tmux
下運行某個程序,好比:linux
tmux new -s your_envs ./program.out & # 運行某個程序並把它掛在後臺,其實不掛在後臺也行,不影響咱們須要實現的功能 # 這個時候即便是退出了終端,咱們的程序仍然在運行着
接下來即使是你退出了終端,也能夠再次回到這個環境,命令如:web
tmux a -t your_envs
經過命令tmux ls
能夠查看已存在的環境。
不過這個要求咱們有服務器的root權限,在某些場合咱們難以得到,所以咱們有另個解決方法。shell
nohup
的意思是no hang up
也就是不掛起的意思,其後可加任何命令command
,使得你退出終端後,這個命令也不會由於SIGHUP
信號而掛起。若是你正在運行一個進程,並且你以爲在退出賬戶時該進程還不會結束,那麼可使用nohup命令。該命令能夠在你退出賬戶/關閉終端以後繼續運行相應的進程。 這個命令詳情如[1]:服務器
nohup command > myout.file 2>&1 & # 咱們程序command的輸出若是在不指定特定的out文件的狀況下, # 在缺省狀況下該做業的全部輸出都被重定向到一個名爲nohup.out的文件中的, # 若是咱們須要指定特定的文件保存其輸出結果,那麼如上命令,重定向到`myout.file`中
其中的2>&1
看起來比較奇怪,其實意思是是將標準錯誤(2)重定向到標準輸出(&1),標準輸出(&1)再被重定向輸入到myout.file文件中,這裏的數字表示爲:ssh
0 – stdin (standard input), 1 – stdout (standard output), 2 – stderr (standard error)
而命令最後的&
就是掛在後臺運行的意思。svg
Update: screen
命令相似於tmux
一樣能夠實現相似的功能。spa
[1]. https://www.cnblogs.com/jinxiao-pu/p/9131057.htmlcode