**
unix programming faq 中文版 v0.1.0**)
乙個使用以上函式的範例程式:
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
int daemon(int,int);
int fork2(void);
void closeall(int);
#define tcp_port 8888
void errexit(const char *str)
void errreport(const char *str)
/* 實際的子程序在此. */
void run_child(int sock)
/* 這是守護程式的主要工作 -- 偵聽連線並生成子程序 */
void process() }}
int main()
openlog("test", log_pid, log_daemon);
process();
return 0;
}
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
#include ;
/* closeall() -- 關閉所有》;=給定值的檔案描述符 */
void closeall(int fd)
/* daemon() - 將程序從使用者端脫離並消失進入後台,若失敗返回-1,
* 但是在那種情況下你只能退出,因為我們可能已經生成了子程序。
* 這是基於bsd的版本,所以呼叫方需負責類似umask等等其它的工作。
*//* 相信在所有posix系統上都能工作 */
int daemon(int nochdir, int noclose)
if (setsid() < 0) /* 不應該失敗 */
return -1;
/* 如果你希望將來獲得乙個控制tty,則排除(dyke)以下的switch語句 */
/* -- 正常情況不建議用於守護程式 */
switch (fork())
if (!nochdir)
chdir("/");
if (!noclose)
return 0;
}/* fork2() -- 類似fork函式,但子程序立刻變成孤兒程序
* (當它退出時不產生僵死程序)
* 返回1給父程序,不是任何有意義的程序號.
* 父程序不能使用wait函式等待子程序結束 (它們是無關的).
*//* 這個版本假設你沒有捕獲和忽略sigchld訊號. */
int fork2()
} if (pid < 0 || waitpid(pid,&status,0) < 0)
return -1;
if (wifexited(status))
if (wexitstatus(status) == 0)
return 1;
else
errno = wexitstatus(status);
else
errno = eintr; /* 唉,類似這個 :-) */
return -1;
}
c語言之 守護程序
include include include include 守戶程序在系統啟動時啟動,系統關閉時終止 守戶程序的建立方法 1.將子程序放入後台。終止父程序 2.在子程序中建立新會話。setsid 3.關閉開啟的檔案描述符 4.改變工作目錄 5.重設檔案許可權掩碼 6.處理sigchld訊號sig...
shell監控PHP守護程序
php指令碼以守護程序的方式,shell指令碼監控php指令碼是否工作,若php指令碼未工作,則啟動php指令碼。cat run.php dowhile true 控制台執行run.php sy sy pc daemon php run.php 1 7876檢視是否執行,上文和下文得到的7868,是...
linux守護程序寫法 守護程序怎麼寫,以及作用
linux守護程序 編寫規則 1.建立子程序,父程序退出 2.在子程序中建立新會話 setsid函式就是用於建立乙個新的會話,並擔任該會話組的組長,呼叫setsid有下面3個作用。讓程序擺脫原會話的控制 讓程序擺脫原程序組的控制 讓程序擺脫原控制終端的控制 3.改變當前目錄為根目錄 4.重設檔案許可...