新聞中心
在Linux系統(tǒng)下,守護進程是一種運行在后臺、不受用戶干擾的進程,通常被用來執(zhí)行一些系統(tǒng)任務(wù),如日志記錄、作業(yè)調(diào)度等。由于守護進程的特殊性,其運行時可能會遇到一些異常情況,例如因為程序更新或配置文件修改等原因需要重新加載守護進程,本文將從以下兩個方面闡述:首先介紹守護進程的概念及其特點,其次分析重新加載的實現(xiàn)過程。

站在用戶的角度思考問題,與客戶深入溝通,找到增城網(wǎng)站設(shè)計與增城網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設(shè)計與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:成都網(wǎng)站設(shè)計、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、域名注冊、網(wǎng)絡(luò)空間、企業(yè)郵箱。業(yè)務(wù)覆蓋增城地區(qū)。
一、守護進程的特點
在Linux系統(tǒng)下,守護進程通常具備以下特點:
1. 后臺運行
守護進程是一種后臺運行的進程,其運行時不會占用用戶的終端和資源。
2. 與用戶無關(guān)的進程
守護進程是一種與用戶無關(guān)的進程,其不依賴于用戶的輸入和觸發(fā)。
3. 通過配置文件設(shè)置
守護進程的運行需要依賴于一個配置文件,這個配置文件通常包含了守護進程的運行參數(shù)、日志位置等信息。
4. 常常被用于執(zhí)行系統(tǒng)任務(wù)
守護進程常常被用于執(zhí)行系統(tǒng)任務(wù),如日志記錄、作業(yè)調(diào)度等。
二、守護進程的重新加載
由于守護進程是一種運行在后臺的進程,其運行時可能會遇到一些異常情況,例如程序更新或配置文件修改等原因,需要重新加載守護進程。實現(xiàn)守護進程的重新加載通常有以下幾種途徑:
1. kill與重啟
通過kill命令先殺死當(dāng)前的守護進程,然后再通過腳本或者其他程序重新啟動一個新的守護進程。
2. 定時器
借助系統(tǒng)定時器,定時檢查守護進程的運行情況,若檢測到守護進程運行異常,則重新啟動守護進程。
3. 信號捕獲
借助信號捕獲機制,當(dāng)捕獲到守護進程異常信號時,重新啟動守護進程。
其中之一種方法最為常見,下面將介紹如何利用kill命令實現(xiàn)守護進程的重新加載。
1. kill與重啟
kill命令可以通過發(fā)送信號來終止某個進程的運行,而對于守護進程,其以守護進程模式運行,通過發(fā)送SIGHUP(1)信號可以重載配置文件并重新開啟日志,達到重新加載守護進程的效果。
接下來結(jié)合實際案例具體講解如何利用kill命令實現(xiàn)守護進程的重新加載。
① 編寫守護進程的啟動腳本
在實際項目中守護進程的啟動通常都是通過腳本實現(xiàn)的,因此我們需要先編寫一個啟動守護進程的腳本,這里以一個常見的應(yīng)用場景——日志記錄為例來介紹。
#!/bin/sh
#進入到日志目錄
cd /var/log
#運行日志記錄的守護進程,并將日志記錄到test.log文件中
./daemon_test >> test.log 2>&1 &
#輸出提示信息
echo “Running daemon_test pid:`ps -ef |grep daemon_test |grep -v grep|awk ‘{print $2}’`”
其中,./daemon_test表示啟動的守護進程文件,“>> test.log 2>&1 &”表示將守護進程的輸出保存到test.log文件中,并在后臺運行。
② 利用kill命令重新加載守護進程
當(dāng)需要重新加載守護進程時,我們首先需要通過ps命令查找當(dāng)前守護進程的pid,然后使用kill命令向該pid發(fā)送SIGHUP信號,即可重新加載守護進程。如下所示:
#查找守護進程的pid
pid=`ps -ef |grep daemon_test |grep -v grep|awk ‘{print $2}’`
#重新加載守護進程
kill -HUP $pid
需要注意的是,在執(zhí)行kill命令之前,需要先使用ps命令查找當(dāng)前守護進程的pid,然后才能正確向該pid發(fā)送信號。
結(jié)語
本文主要介紹了Linux守護進程的概念和特點,以及實現(xiàn)守護進程的重新加載方法。正如Linux系統(tǒng)作為一種開源的、易于定制和修改的操作系統(tǒng),守護進程的重新加載也可以通過多種途徑實現(xiàn),讀者可以根據(jù)實際需求選擇不同的實現(xiàn)方式。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián),建站經(jīng)驗豐富以策略為先導(dǎo)10多年以來專注數(shù)字化網(wǎng)站建設(shè),提供企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,響應(yīng)式網(wǎng)站制作,設(shè)計師量身打造品牌風(fēng)格,熱線:028-86922220linux下daemon占用CPU資源很高,怎么解決
1.在系統(tǒng)維護的過程中,隨時可能有需要查看CPU使用率,并根據(jù)相應(yīng)信息分析系統(tǒng)狀租凱況的需要。在CentOS中,可蠢櫻以通過top命令來查看CPU使用狀況。運行top命令后,CPU使用狀態(tài)會以全屏的方式顯示,帶型叢并且會處在對話的模式–用基于top的命令
如何編寫Linux Daemon后臺程序?
守護進程(Daemon)是運行在后臺的一種特殊進程。它獨立于控制終端并且周期核瞎模性地執(zhí)行某種任務(wù)或等待處理某些發(fā)生的事件。守護進程是一種很有用的進 程。Linux的大多數(shù)服務(wù)器就是用守護進程實現(xiàn)的。比如,Internet服務(wù)器inetd,Web服務(wù)器httpd等。同時,守護進程完成許多系統(tǒng)任 務(wù)。比如,作業(yè)規(guī)劃進程crond,打印進程lpd等。 \x0d\x0a守護進程的編程本身并不復(fù)雜,復(fù)雜的是各種版本的Unix的實現(xiàn)機制不盡相同,造成不同Unix環(huán)境下守護進程的編程規(guī)則并不一致。這需要讀者注意,照搬 某些書上的規(guī)則(特別是BSD4.3和低版本的System V)到Linux會出現(xiàn)錯誤的。下面將全面介紹Linux下守護進程的編程要點并給出詳細實例。 \x0d\x0a一. 守護進程及其特性 \x0d\x0a守護進程最重要的特性是后臺運行。在這一點上DOS下的常駐內(nèi)存程序TSR與之相似。其次,守護進程必須與其運行前的環(huán)境隔離開來。這些環(huán)境包括未關(guān)閉的 文件描述符,控制終端,會話和進程組,工作目錄以及文件創(chuàng)建掩模等。這些環(huán)境通常是守護進程從執(zhí)行它的父進程(特別是shell)中繼承下來的。最后,守 護進程的啟動方式有其特殊之處。它可以在Linux系統(tǒng)啟動時從啟動腳本/etc/rc.d中啟動,可以由作業(yè)規(guī)劃進程crond啟動,還可以由用戶終端 (通常是shell)執(zhí)行。 \x0d\x0a總之,除開這些特殊性以外,守護進程與普通進程基本上沒有什么區(qū)別。因此,編寫守護進程實際上是把一個普通進程按照上述的守護進程的特性改造成為守護進程。如果讀者對進程有比較深入的認識就更容易理解和編程了。 \x0d\x0a二. 守護進程的編程要點 \x0d\x0a前面講過,不同Unix環(huán)境下守護進程的編程規(guī)則并不一致。所幸的是守護進程的編程原則其實都一樣,區(qū)別在于具體的實現(xiàn)細節(jié)不同。這個原則就是要滿足守護 進程的特性。同時,Linux是基于Syetem V的SVR4并遵循Posix標準,實現(xiàn)起來與BSD4相比更方便。編程要點如下; \x0d\x0a1. 在后臺運行。 \x0d\x0a為避免掛起控制終端將Daemon放入后臺執(zhí)行。方法是在進程中調(diào)用fork使父進程終止,讓Daemon在子進程中后臺執(zhí)行。改緩 \x0d\x0aif(pid=fork()) \x0d\x0aexit(0);//是父進程,結(jié)束父進程,子進程繼續(xù) \x0d\x0a2. 脫離控制終端,登錄會話和進程組 \x0d\x0a有必要先介紹一下Linux中的進程與控制終端,登錄會話和進程組之間的關(guān)系:進程屬于一個進程組,進程組號(GID)就是進程組長的進程號(PID)。登錄會話可以包含多個進程組。這些進程組共享一個控制終端。這個控制終端通常是創(chuàng)建進程的登錄終端。 \x0d\x0a控制終端,登錄會話和進程組通常是從父進程繼承下來的。我們的目的就是要擺脫它們,使之不受它們的影響。方法是在第1點的基礎(chǔ)上,調(diào)用setsid()使進程成為會話組長: \x0d\x0asetsid(); \x0d\x0a說明:當(dāng)進程是會話組長時setsid()調(diào)用失敗。但之一點已經(jīng)保證進程不是會話組長。setsid()調(diào)用成功后,進程成為新的會話組長和新的進程組長,并與原來的登錄會話和進程組脫離。由于會話過程對控制終端的獨占性,進程同時與控制終端脫離。 \x0d\x0a3. 禁止進程重新打開控制終端 \x0d\x0a現(xiàn)在,進程已經(jīng)成為無終端的會話組長。但它可以重新申請打開一個控制終端??梢酝ㄟ^使進程不再成為會話組長來禁止進程重新打開控制終端: \x0d\x0aif(pid=fork()) \x0d\x0aexit(0);//結(jié)束之一子進程,第二子進程繼續(xù)(第二子進程不再是會話組長) \x0d\x0a4. 關(guān)閉打開的文件描述符 \x0d\x0a進程從創(chuàng)建它的父進程那里繼承了打開的文件描述符。如不關(guān)閉,將會浪費系統(tǒng)資源,造成進程所在的文件系統(tǒng)無法卸下以及引起無法預(yù)料的錯誤。按如下方法關(guān)神鄭閉它們: \x0d\x0afor(i=0;i 關(guān)閉打開的文件描述符close(i);> \x0d\x0afor(i=0;i \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0a#include \x0d\x0avoid init_daemon(void) \x0d\x0a{ \x0d\x0aint pid; \x0d\x0aint i; \x0d\x0a\x0d\x0aif(pid=fork()) \x0d\x0aexit(0);//是父進程,結(jié)束父進程 \x0d\x0aelse if(pid \x0d\x0a#include \x0d\x0avoid init_daemon(void);//守護進程初始化函數(shù) \x0d\x0amain() \x0d\x0a{ \x0d\x0aFILE *fp; \x0d\x0atime_t t; \x0d\x0ainit_daemon();//初始化為Daemon \x0d\x0awhile(1)//每隔一分鐘向test.log報告運行狀態(tài) \x0d\x0a{ \x0d\x0asleep(60);//睡眠一分鐘 \x0d\x0aif((fp=fopen(“test.log”,”a”)) >=0) \x0d\x0a{ \x0d\x0at=time(0); \x0d\x0afprintf(fp,”I’m here at %sn”,asctime(localtime(&t)) ); \x0d\x0afclose(fp); \x0d\x0a} \x0d\x0a} \x0d\x0a} \x0d\x0a以上程序在RedHat Linux6.0下編譯通過。步驟如下: \x0d\x0a編譯:gcc _g _o test init.c test.c \x0d\x0a執(zhí)行:./test \x0d\x0a查看進程:ps _ef \x0d\x0a從輸出可以發(fā)現(xiàn)test守護進程的各種特性滿足上面的要求。
linux daemon reload的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于linux daemon reload,Linux守護進程的重新加載,linux下daemon占用CPU資源很高,怎么解決,如何編寫Linux Daemon后臺程序?的信息別忘了在本站進行查找喔。
創(chuàng)新互聯(lián)【028-86922220】值得信賴的成都網(wǎng)站建設(shè)公司。多年持續(xù)為眾多企業(yè)提供成都網(wǎng)站建設(shè),成都品牌建站設(shè)計,成都高端網(wǎng)站制作開發(fā),SEO優(yōu)化排名推廣服務(wù),全網(wǎng)營銷讓企業(yè)網(wǎng)站產(chǎn)生價值。
分享標題:Linux守護進程的重新加載(linuxdaemonreload)
分享網(wǎng)址:http://m.5511xx.com/article/dpjidhc.html


咨詢
建站咨詢
