利用網上下載的這段代碼,成功實現了守護進程,原來守護進程是很簡單的事情。
在main函數中執行
init_daemon();//初始化為Daemon
就可以把進程變成守護進程
#include
#include
#include
#include
#include
void init_daemon(void)
{
int pid;
int i;
if(pid=fork())
exit(0);//是父進程,結束父進程
else if(pid< 0)
exit(1);//fork失敗,退出
//是第一子進程,後台繼續執行
setsid();//第一子進程成為新的會話組長和進程組長
//並與控制終端分離
if(pid=fork())
exit(0);//是第一子進程,結束第一子進程
else if(pid< 0)
exit(1);//fork失敗,退出
//是第二子進程,繼續
//第二子進程不再是會話組長
for(i=0;i< NOFILE;++i)//關閉打開的文件描述符
close(i);
chdir("/tmp");//改變工作目錄到/tmp
umask(0);//重設文件創建掩模
return;
}