ubuntu後台執行程序

2021-06-22 23:15:20 字數 1773 閱讀 1871

最近在azure上搭乙個基於web.py的web service,由於是用putty去ssh伺服器,在server上把web.py啟動以後,回到寢室由於pc睡眠,putty連線inactive,導致web service無法正常訪問。

正常啟動web service:

python test.py 8888

其中8888是埠號

為了即使關掉當前的ssh連線,同時避免網路出現異常導致ssh斷開連線,需要想辦法關掉putty以後也能讓程序繼續在後台執行。

關閉putty的時候,也會關閉該程序的所有子程序。於是又2個思路:

1. 讓web service的程序忽略關閉訊號

nohup python test.py 8888 2>webpy.log

即讓該程序忽略hangup訊號,同時將log記錄下來。

於是我們通過ps -ef檢視程序資訊,在ssh連線還在的時候,該web service的程序的父程序是ssh,如圖:

ssh關閉以後,再看該web service的父程序變成了1,即init的程序id

2. 讓web service不是ssh的子程序

setsid python test.py 8888 2>webpy.log

更直接,看setsid的manual,有:「setsid runs a program in a new session.」

檢視程序資訊發現該程序的父程序是1,即init的程序id,既然該程序與當前的ssh連線沒關係,那就關閉ssh也沒關係啦~

關閉ssh以後,ps -ef如下圖:

哦了~通過這兩種方法就可以避免ssh連線斷開後子程序也關閉的情況了,但是這樣的話最好把log記錄下來

再加一種方法:

subshell:

(python test.py 8888 2>webpy.log &)

注意括號不能少

這樣得到的該web service的程序的父程序id也是1,因此也能後台執行。

未使用screen的程序樹:

[root@pvcent107 ~]# ping www.google.com &

[1] 9499

[root@pvcent107 ~]# pstree -h 9499

init─┬─xvnc

├─acpid

├─atd

├─2*[sendmail]

├─sshd─┬─sshd───bash───pstree

│ └─sshd───bash───ping

bash是sshd的子程序,所以sshd關閉以後,子程序也關閉

使用screen的程序樹:

[root@pvcent107 ~]# screen -r urumchi

[root@pvcent107 ~]# ping www.ibm.com &

[1] 9488

[root@pvcent107 ~]# pstree -h 9488

init─┬─xvnc

├─acpid

├─atd

├─screen───bash───ping

├─2*[sendmail]

bash是screen的子程序,而screen是init的子程序,因此關掉sshd與該bash沒有關係

後台執行程序(個人筆記,非教程)

加 符號 超級使用者的命令需要提前讓終端記住超級使用者密碼,終端關閉,程序就停止 cp a.txt b.txt nohup 終端關閉,程序不受影響,有預設輸出檔案 nohup cp a.txt b.txt nohup 和 可以結合使用 nohup cp a.txt b.txt ctr z 當前程序切...

nohup和 後台執行,程序檢視及終止

1.nohup 用途 不結束通話地執行命令。語法 nohup command arg 無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 home nohup.out 檔案中。如果沒有檔案...

nohup和 後台執行,程序檢視及終止

用途 不結束通話地執行命令。語法 nohup command arg 無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 檔案中。如果當前目錄的 nohup.out 檔案不可寫,輸出重定向到 home nohup.out 檔案中。如果沒有檔案能建立或開啟以用...