Linux Deamon函數

  • Daemon庫函數。

作用:

守護進程是生存期長的一種進程,因爲他沒有控制終端,他們是在後臺運行的。調用daemon()函數將該進程設置爲一個守護進程。

比如:

 執行命令: ping 4.2.2 &  

會釋放終端,但是還是會在屏幕上面輸出,需要使用,deamon,完全交由後臺運行。

函數原型:

int     daemon(int  nochdir ,int noclose)

  1. 返回值:int
  2. nochdir 是否改變路徑,
  3. int  noclose ,是否關閉終端

一般兩個參數的值設置爲零,默認不改變路徑,並且關閉終端。原因:

當 nochdir爲零時,當前目錄變爲根目錄,否則不變;#include <unistd.h> int daemon(int nochdir, int noclose);

當 noclose爲零時,標準輸入、標準輸出和錯誤輸出重導向爲/dev/null,也就是不輸出任何信 息,否則照樣輸出。

daemon原理解析;

deamon()調用了fork(),如果fork成功,那麼父進程就調用_exit(2)退出,所以看到的錯誤信息 全部是子進程產生的。如果成功函數返回0,否則返回-1並設置errno。

  •   syslog

void syslog(int priority, const char *message, arguments...)

  • 作用

syslog() 函數向日志設備(日誌工具 facility)發送日誌消息。

  • priority

每一個消息都有一個 priority(優先級) 參數,這個參數由一個“危險係數”(severity level)和一個程序標識碼(facility value)相或(OR)得來。

由於syslog  設置的是最高級的通知方式 ,所以所有的終端都會收到提示,所以在程序運時前會在屏幕打印log內的記錄

該函數將 message 字符串寫到系統紀錄中,參數 priority 的值可能爲

LOG_EMERG、   緊急

LOG_ALERT、

LOG_CRIT、         //以上三個值屬於高級的通知方式 ,會通知到每一個終端,一般緊急情況下就會使用該三種方式。

LOG_ERR、

LOG_WARNING、

LOG_NOTICE、

LOG_INFO、

 LOG_DEBUG。

最後  closelog();

舉例說明:

代碼如圖:

程序解讀:

  1. 在該程序中首先調用daemon函數進程設置爲保護進程:
  2. openlog() 函數的作用是打開一個日誌連接
  3. 最後  closelog();

killall以進程名來殺進程,kill 以進程號殺死進程,默認讓程序直接停止。如果還想做某事,則需要了解linux下面的信號機制。

終端服務程序。在執行默認動作的時候修改循環條件,kill本質一個進程給另外一個進程發信號,默認是終止的信號。

對於信號的處理:

  1.  採取動作
  2.  忽略
  3.  採取默認動作

信號:

  • 信號安裝函數:

int signal (int signum, void (*sig_hundler)(int ))   //函數指針

  •  所有的信號:

*其中九號信號不可被捕捉,kill 默認發送15號信號,子進程終止,系統會給父進程發送17號信號,kill 默認發送15號信號。

  • 部分信號詳細介紹:

9號信號使用方法:

killall -9(SIGKILL)   deamon(進程名)

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章