關於守護進程,在此會介紹一下幾種:html
1.screenpython
2.supervisord(python)shell
簡單來講,Screen是一個能夠在多個進程之間多路複用一個物理終端的窗口管理器。Screen中有會話的概念,用戶能夠在一個screen會話中建立多個screen窗口,在每個screen窗口中就像操做一個真實的telnet/SSH鏈接窗口那樣。在screen中建立一個新的窗口有這樣幾種方式:session
1.直接在命令行鍵入screen命令ssh
[root@tivf06 ~]# screen
Screen將建立一個執行shell的全屏窗口。你能夠執行任意shell程序,就像在ssh窗口中那樣。在該窗口中鍵入exit退出該窗口,若是這是該screen會話的惟一窗口,該screen會話退出,不然screen自動切換到前一個窗口。spa
2.Screen命令後跟你要執行的程序。命令行
[root@tivf06 ~]# screen vi test.c
Screen建立一個執行vi test.c的單窗口會話,退出vi將退出該窗口/會話。3d
3.以上兩種方式都建立新的screen會話。咱們還能夠在一個已有screen會話中建立新的窗口。在當前screen窗口中鍵入C-a c
,即Ctrl鍵+a鍵,以後再按下c鍵,screen 在該會話內生成一個新的窗口並切換到該窗口。code
screen還有更高級的功能。你能夠不中斷screen窗口中程序的運行而暫時斷開(detach)screen會話,並在隨後時間從新鏈接(attach)該會話,從新控制各窗口中運行的程序。例如,咱們打開一個screen窗口編輯/tmp/abc文件:xml
[root@tivf06 ~]# screen vi /tmp/abc
以後咱們想暫時退出作點別的事情,好比出去散散步,那麼在screen窗口鍵入C-a d
,Screen會給出detached提示:
半個小時以後回來了,找到該screen會話:
[root@tivf06 ~]# screen -ls There is a screen on: 16582.pts-1.tivf06 (Detached) 1 Socket in /tmp/screens/S-root.
從新鏈接會話:
[root@tivf06 ~]# screen -r 16582
看看出現什麼了,太棒了,一切都在。繼續幹吧。
你可能注意到給screen發送命令使用了特殊的鍵組合C-a。這是由於咱們在鍵盤上鍵入的信息是直接發送給當前screen窗口,必須用其餘方式向screen窗口管理器發出命令,默認狀況下,screen接收以C-a開始的命令。這種命令形式在screen中叫作鍵綁定(key binding),C-a叫作命令字符(command character)。
能夠經過C-a ?
來查看全部的鍵綁定,經常使用的鍵綁定有:
C-a ? | 顯示全部鍵綁定信息 |
---|---|
C-a w | 顯示全部窗口列表 |
C-a C-a | 切換到以前顯示的窗口 |
C-a c | 建立一個新的運行shell的窗口並切換到該窗口 |
C-a n | 切換到下一個窗口 |
C-a p | 切換到前一個窗口(與C-a n相對) |
C-a 0..9 | 切換到窗口0..9 |
C-a a | 發送 C-a到當前窗口 |
C-a d | 暫時斷開screen會話 |
C-a k | 殺掉當前窗口 |
C-a [ | 進入拷貝/回滾模式 |
Q1:解決screen Cannot open your terminal '/dev/pts/1'問題
userA首先登陸系統,使用screen開啓了一個session,而後detach這個窗口。
userB而後登陸系統,經過su - userA 變成userA,而後使用screen -r 恢復以前detached窗口,這時系統報以下錯誤:
Cannot open your terminal '/dev/pts/1' - please check.
userB在 su - userA之後,執行以下命令便可:
script /dev/null