linux 守護程序 daemon 1

2021-06-10 01:43:01 字數 1989 閱讀 6826

daemon程式簡介 

daemon是長時間執行的程序,通常在系統啟動後就執行,在系統關閉時才結束。一般說daemon程式在後台執行,是因為它沒有控制終端,無法和前台的使用者互動。daemon程式一般都作為服務程式使用,等待客戶端程式與它通訊。我們也把執行的daemon程式稱作守護程序。

比如,我們的網路服務程式,可以在完成建立套介面,繫結套介面,設定套介面為監聽模式後,變成守護程序進入後台執行而不占用控制終端,這是網路服務程式的常用模式。unix下的網路服務程式,如web  server,ftp,telnet一般都是由守護程序(daemon)來實現的。守護程序不占用終端,在後台執行。unix的守護程序一般都命名為  *d 的形式,如httpd,telnetd等等。 

守護程序一旦脫離了終端,退出就成了問題。使用 ps axj 查出程序id然後 kill id 之。

daemon程式編寫規則

編寫daemon程式有一些基本的規則,以避免不必要的麻煩。

1、首先是程式執行後呼叫fork,並讓父程序退出。子程序獲得乙個新的程序id,但繼承了父程序的程序組id。

2、呼叫setsid建立乙個新的session,使自己成為新session和新程序組的leader,並使程序沒有控制終端(tty)。

3、改變當前工作目錄至根目錄,以免影響可載入檔案系統。或者也可以改變到某些特定的目錄。

4、設定檔案建立mask為0,避免建立檔案時許可權的影響。

5、關閉不需要的開啟檔案描述符。因為daemon程式在後台執行,不需要於終端互動,通常就關閉stdin、stdout和stderr。其它根據實際情況處理。另乙個問題是daemon程式不能和終端互動,也就無法使用printf方法輸出資訊了。

另乙個問題是daemon程式不能和終端互動,也就無法使用printf方法輸出資訊了。我們可以使用syslog機制來實現資訊的輸出,方便程式的除錯。

下面是乙個daemon程式的例子:(daemontest.c) 

#include #include #include #include #include #include #include int daemon_init(void)

void sig_term_func(int sig)

}int main(void)

openlog("daemontest", log_pid, log_user);

syslog(log_info, "program started.");

signal(sigterm, sig_term_func); //to catch the signal

while(1)

return 0;

}

使用如下命令編譯該程式: gcc -wall -o daemontest daemontest.c編譯完成後生成名為daemontest的可執行程式,執行./daemontest來測試程式的執行。

使用ps axj命令可以顯示系統中已執行的daemon程式的資訊,包括程序id、session id、控制終端等內容。部分顯示內容:

ppid   pid  pgid   sid tty      tpgid stat   uid   time command

1 17765 17765 17765 ?           -1 ss       0   0:00 ./daemontest

從中可以看到daemontest程式執行的程序號為17765。

我們再來看看/var/log/messages檔案中的資訊:     

feb  3 17:09:30 localhost daemontest[17765]: program started.

顯示了我們在程式中希望輸出的資訊。

使用kill 17765命令來殺死這個程序,/var/log/messages檔案中就會有如下的資訊:

feb  3 17:12:26 localhost daemontest[17765]: program terminated.

再使用ps axj命令檢查,發現系統中daemontest程序已經沒有了。

linux 守護程序 daemon

原文出處 daemon程式簡介 daemon是長時間執行的程序,通常在系統啟動後就執行,在系統關閉時才結束。一般說daemon程式在後台執行,是因為它沒有控制終端,無法和前台的使用者互動。daemon程式一般都作為服務程式使用,等待客戶端程式與它通訊。我們也把執行的daemon程式稱作守護程序。比如...

Linux 守護程序Daemon

守護程序是生存期長的一種程序。linux常用於伺服器,程式通常不執行在前台。執行於前台的程序和終端關聯,一旦終端關閉,程序也隨之退出。因為守護程序不和終端關聯,因此它的標準輸出和標準輸入也無法工作,除錯資訊應該寫入到普通檔案中,以便將來進行錯誤定位和除錯。而且守護程序通常以root許可權執行。程式示...

daemon守護程序

daemon守護程序 守護程序是乙個後台程序,不能夠控制終端,所以任何輸出,無論是向標準出錯裝置stderr還是向標準輸出裝置stdout的輸出都需做特別處理。守護程序一般在系統啟動時啟動,它的父程序是init程序。建立守護程序 1在父程序執行fork然後讓父程序退出。2在子程序中使用setsid呼...