十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
這兩天學習了linux 守護進程這個地方知識點挺多的,而且很重要,所以,今天添加一點小筆記。
成都創(chuàng)新互聯(lián)是網站建設專家,致力于互聯(lián)網品牌建設與網絡營銷,專業(yè)領域包括網站設計、網站制作、電商網站制作開發(fā)、重慶小程序開發(fā)公司、微信營銷、系統(tǒng)平臺開發(fā),與其他網站設計及系統(tǒng)開發(fā)公司不同,我們的整合解決方案結合了恒基網絡品牌建設經驗和互聯(lián)網整合營銷的理念,并將策略和執(zhí)行緊密結合,且不斷評估并優(yōu)化我們的方案,為客戶提供全方位的互聯(lián)網品牌整合方案!
1,進程的概念:程序的一次動態(tài)執(zhí)行過程。
進程存在于內存當中,存在著 創(chuàng)建,調度,執(zhí)行和消亡,進程號是進程的唯一標志,每一個進程都有自己獨立的內存空間,在32位操作系統(tǒng)中,進程擁有0-4G的內存空間,其中0-3G屬于用戶,3G-4G屬于內核,所以就出現(xiàn)了進程的執(zhí)行模式:用戶模式和內核模式。
2,進程的類型:交互進程,批處理進程,守護進程
3,守護進程:Linux中的后臺服務進程,daemon進程
4,守護進程的創(chuàng)建步驟:
(1)創(chuàng)建子進程,父進程退出。
經過這步以后,子進程就會成為孤兒進程(父進程先于子進程退出, 此時的子進程,成為孤兒進程,會被init進程收養(yǎng))。使用fork()函數(shù),如果返回值大于0,表示為父進程,exit(0),父進程退出,子進程繼續(xù)。
(2)在子進程中創(chuàng)建新會話,使當前進程成為新會話組的組長。
使用setsid()函數(shù),如果當前進程不是進程組的組長,則為當前進程創(chuàng)建一個新的會話期,使當前進程成為這個會話組的首進程,成為這個進程組的組長。
(3)改變當前目錄為根目錄。
由于守護進程在后臺運行,開始于系統(tǒng)開啟,終止于系統(tǒng)關閉,所以要將其目錄改為系統(tǒng)的根目錄下。進程在執(zhí)行時,其文件系統(tǒng)不能被卸下。
(4)重新設置文件權限掩碼。
進程從父進程那里繼承了文件創(chuàng)建掩碼,所以可能會修改守護進程存取權限位,所以要將文件創(chuàng)建掩碼清除,umask(0);
(5)關閉文件描述符。
子進程從父進程那里繼承了打開文件描述符。所以使用close即可關閉。
在這里要用到getdtablesize()函數(shù)得到這個進程打開文件的數(shù)目。
按照上面的步驟即可完成守護進程的創(chuàng)建。
具體的代碼如下,守護進程的功能寫的較為簡單,往文件里寫東西:
#include#include #include #include #include #include int main() { // 1創(chuàng)建子進程 ,父進程退出 pid_t pid = fork(); if(pid<0) { perror("fork error"); return -1; } else if(pid>0) { exit(0); } else { while(1) { //2 組長 setsid(); // 改變路徑至根目錄 chdir("/tmp"); //重設文件掩碼 umask(0); //關閉文件描述符 int des=getdtablesize(); int i=0; for(i=0;i
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創(chuàng)新互聯(lián)。