远程连接Linux,如何使程序断开连接后继续运行
摘要:遠程連接到Linux終端后,如果發生意外或者人為斷開了遠程連接,那么正在運行的程序或命令(例如備份數據庫這種比較耗時的操作)就會中斷。原因是因為斷開連接后,終端會收到SIGHUP(hang-up掛斷)信號從而關閉該會話期的子進程。解決方法1.nohup命令nohup命令的功能就和它的名字一樣,nohup,忽略hup信號,不掛斷進程,進程仍然屬于當前會話(終端關閉后,進程會變成孤兒進程,PPID變成1)。例如:(不加&;命令不會在后臺執行)[root@localhost
-
遠程連接到Linux終端后,如果發生意外或者人為斷開了遠程連接,那么正在運行的程序或命令(例如備份數據庫這種比較耗時的操作)就會中斷。原因是因為斷開連接后,終端會收到SIGHUP(hang-up 掛斷)信號從而關閉該會話期的子進程。
解決方法1. nohup 命令
nohup命令的功能就和它的名字一樣,no hup,忽略hup信號,不掛斷進程,進程仍然屬于當前會話(終端關閉后,進程會變成孤兒進程,PPID變成1)。
[root@localhost ~]# nohup ping 127.0.0.1 &;[1] 27641nohup: 忽略輸入并把輸出追加到"nohup.out"
例如:(不加&; 命令不會在后臺執行)nohup會將ping命令的默認輸出從屏幕重定向到當前目錄的nohup.out文件,如果當前目錄不可寫,會重定向到 $HOME/nohup.out 。
如果ping命令已經重定向輸出了,就不會重定向到nohup.out了,例如nohup ping 127.0.0.1>/dev/null &;2. screen 命令
如果程序需要交互等復雜的操作,推薦使用功能強大的screen。screen 提供了 ANSI/VT100 的終端模擬器,使它能夠在一個真實終端下運行多個全屏的偽終端。
不是所有Linux都自帶screen。查詢安裝包信息:rpm -qa|grep screen
安裝方法:- CentOS系統:yum install screen
- Debian 系統:apt-get install screen
用法:
- 打開新的會話窗口:screen
- 結束當前會話:exit
- 在新會話中執行程序(程序關閉時會話自動結束):screen vi test.c
- 打開新會話并起個名字:screen -S myname
- 暫時離開會話(經常用):Ctrl+a 然后 d
- 查看會話列表: screen -ls
- 恢復之前離開的會話:screen -r 會話名或進程號
- 清除dead狀態的會話:screen -wipe
- 啟動一個開始就是Detached狀態的會話:screen -dmS 名字 命令
常用快捷鍵功能 Ctrl+a ? 顯示所有鍵綁定信息 Ctrl+a d 暫時離開會話返回之前的shell(會話進入Detached狀態) Ctrl+a w 顯示所有窗口列表(不包括Detached狀態的) Ctrl+a Ctrl+a 切換到之前顯示的窗口(不切換Detached狀態的) Ctrl+a c 創建一個新的運行shell的窗口并切換到該窗口 Ctrl+a n 切換到下一個窗口 Ctrl+a p 切換到上一個窗口 Ctrl+a 0..9 切換到窗口0..9 Ctrl+a k 殺掉當前窗口(會提示確認) 參考:
進程操作相關的命令
http://www.path8.net/tn/archives/3746
http://blog.csdn.net/v1v1wang/article/details/68555521. &;
舉例:ping 127.0.0.1 >/dev/null 2>&;1 &;
后臺運行ping命令(終端不顯示輸出結果和錯誤信息),關閉終端會終止命令。2. Ctrl+C、 Ctrl+Z
Ctrl+C 終止當前命令
[ aliyunzixun@xxx.com ~]# ping 127.0.0.1>/dev/null^Z[1]+ Stopped ping 127.0.0.1 > /dev/null
Ctrl+Z 掛起當前命令到后臺,命令會暫停執行3. jobs、 fg、 bg
jobs 顯示當前會話運行的后臺任務
語法:jobs [-lnprs] [jobspec ...] or jobs -x command [args]
參數:- -l 比默認多顯示進程id(PID),+表示當前任務,-表示非當前,任務有4種狀態:running、stopped、done(正常完成)、Terminated(中止,比如通過kill命令殺死)
- -p 僅顯示進程號
- -n 顯示任務狀態的變化 (然而我沒有試出效果)
- -r 僅顯示運行狀態(running)的任務;
- -s 僅顯示停止狀態(stoped)的任務。r s兩個參數一起用只有放在后面的會起作用。
- jobspec 表示任務號或唯一的任務名,可以多個。
fg 將后臺任務放到前臺(Foreground)
[root@localhost ~]# ping 127.0.0.1>/dev/null^Z[1]+ Stopped ping 127.0.0.1 > /dev/null[root@localhost ~]# bg 1[1]+ ping 127.0.0.1 > /dev/null &;[root@localhost ~]# jobs[1]+ Running ping 127.0.0.1 > /dev/null &;[root@localhost ~]# fgping 127.0.0.1 > /dev/null^C
語法:fg [job_spec] 不加參數表示操作當前任務
bf 使掛起的任務在后臺運行(Background )
語法:bg [job_spec ...] 不加參數表示操作當前任務4. ps、 pstree
ps 查看系統進程
[root@localhost ~]# ps PID TTY TIME CMD27850 pts/2 00:00:00 bash28304 pts/2 00:00:00 ps
默認值顯示當前會話的進程:ps -ef 完整格式顯示所有進程。PID是進程號,PPID是父進程號
[root@localhost ~]# ps -ef|grep SCREENroot 28364 27850 0 18:03 pts/2 00:00:00 grep SCREENroot 28825 1 0 Oct09 ? 00:00:00 SCREEN -S mym
可以用管道符 | 聯合grep過濾輸出:pstree 顯示進程樹
- pstree 顯示完整進程樹,根節點為init
- pstree 進程ID 以指定進程為根顯示進程樹
- pstree -h 特別標明現在執行的程序。
- pstree -H進程ID 但特別標明指定的程序
- pstree -a 顯示每個程序的完整指令,包含路徑,參數或是常駐服務的標示
5. kill、 pkill
kill 發送信號給系統,讓系統將指定進程結束
- kill -l 顯示信號列表,常用的有2個,SIGTERM 代號15(默認信號),SIGKILL 代號 9
- kill 進程ID 發送SIGTERM,程序可以花一段時間正常關閉自己,該信號可以被忽略。
- kill -15 %jobspec 正常結束任務
- kill -9 進程ID 發送SIGKILL ,強制結束程序,未保存的進度將會丟失,程序不能忽略此信號。
- kill -9 %jobspec 強制結束任務
pkill 通過命令名字結束進程,可以使用正則。信號值和kill一樣
- pkill -9 fire 請求強制結束所有名字中有fire的進程
為了避免匹配錯,可以先使用pgrep -l fire或者ps -ef|grep fire查詢一下 - pkill -u 用戶列表 正常結束指定用戶下的所有進程
- pkill -P PPID列表 正常結束指定父進程下的所有進程
- 以上是遠程連接Linux,如何使程序斷開連接后繼續運行的內容,更多 連接 斷開 遠程 運行 繼續 程序 如何 Linux 的內容,請您使用右上方搜索功能獲取相關信息。
總結
以上是生活随笔為你收集整理的远程连接Linux,如何使程序断开连接后继续运行的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: wxpython控件绑定事件_wxPyt
- 下一篇: Linux 核心模块,LINUX核心及核