-
Daemon庫函數。
作用:
守護進程是生存期長的一種進程,因爲他沒有控制終端,他們是在後臺運行的。調用daemon()函數將該進程設置爲一個守護進程。
比如:
執行命令: ping 4.2.2 &
會釋放終端,但是還是會在屏幕上面輸出,需要使用,deamon,完全交由後臺運行。
函數原型:
int daemon(int nochdir ,int noclose)
- 返回值:int
- nochdir 是否改變路徑,
- 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();
舉例說明:
代碼如圖:
程序解讀:
- 在該程序中首先調用daemon函數進程設置爲保護進程:
- openlog() 函數的作用是打開一個日誌連接
- 最後 closelog();
killall以進程名來殺進程,kill 以進程號殺死進程,默認讓程序直接停止。如果還想做某事,則需要了解linux下面的信號機制。
終端服務程序。在執行默認動作的時候修改循環條件,kill本質一個進程給另外一個進程發信號,默認是終止的信號。
對於信號的處理:
- 採取動作
- 忽略
- 採取默認動作
信號:
信號安裝函數:
int signal (int signum, void (*sig_hundler)(int )) //函數指針
所有的信號:
*其中九號信號不可被捕捉,kill 默認發送15號信號,子進程終止,系統會給父進程發送17號信號,kill 默認發送15號信號。
部分信號詳細介紹:
9號信號使用方法:
killall -9(SIGKILL) deamon(進程名)