天天看點

python實作将程式以守護程序的方式運作

1. 概念區分

1. 前台程序:程序預設是前台運作的,會占據shell控制台,使用者無法做其他操作。可以使用‘&’将前台程序轉為背景程序

2. 背景程序:切為背景程序稱為job,[4] 是job ID , 5094是PID, 

1)jobs  -l  /  ps  可以檢視背景程序

2)背景程序是依賴控制台的,控制台關閉,相關的背景程序關閉

3)fg 1将job ID 為1的程序調到前台來運作

4)bg 将一個在背景暫停的指令,變成繼續執行 如果背景中有多個指令,可以用bg jobID

python實作将程式以守護程式的方式運作

3. 守護程序:守護程序顧名思義,主要用于一些長期運作,守護着自己的職責(監聽端口,監聽服務等)。守護程序成為了程序組長(或者會話組長),和控制終端失去了聯系(其檔案描述符也是繼承于父程序的,但是在變成守護程序的同時stdin,stdout,stderr和控制台失去聯系了)

2. 将程式以守護程序的方式運作

python實作将程式以守護程式的方式運作
python實作将程式以守護程式的方式運作

把/dev/null 看作"黑 洞" . 它非常等價于一個隻寫檔案. 所有寫入它的内容都會永遠丢失. 而嘗試從它那兒讀取内容則什麼也讀不到。

chmod  755 (屬主7,組權5,其他使用者的權限5)

umask  022 設定新建立檔案和目錄的預設權限,用的是補碼的方式,也就是檔案權限為644 (6-0, 6-2, 6-2),目錄的權限為755(7-0,7-2,7-2)

os.umask(0)    #修改檔案模式,讓程序有最大權限,保證程序有讀寫執行權限,這個不是一個好的方法。

os.setsid()       #該方法做一系列的事:首先它使得該程序成為一個新會話的上司者,接下來它将程序轉變一個新程序組的上司者,#最後該程序不再控制終端, 運作的時候,建立一個程序,linux會配置設定個程序号。然後調用os.fork()建立子程序。若pid>0就是自己,自殺。子程序跳過if語句,通過os.setsid()成為linux中的獨立于終端的程序。

os.dup2将系統輸入、輸出、錯誤的輸出均輸出到/dev/null中。