Linux使用日志系統(tǒng)調(diào)試守護(hù)進(jìn)程 |
發(fā)布時(shí)間: 2012/8/10 14:56:27 |
守護(hù)進(jìn)程脫離終端控制,在調(diào)試時(shí)候造成一定不便?梢杂胹yslog服務(wù)把程序出錯(cuò)信息輸入日志文件中。從而可以看出問(wèn)題所在。
把上次的程序用日志方式改寫(xiě)。 主要用到三個(gè)函數(shù):syslog,openlog,closelog。 守護(hù)進(jìn)程的寫(xiě)法不變,加入日志服務(wù)。 代碼來(lái)自華清遠(yuǎn)見(jiàn): #include #include #include #include #include #include #include #include int main() { pid_t pid, sid; int i, fd; char *buf = "this is a daemon!n"; pid = fork();//創(chuàng)建子進(jìn)程,父進(jìn)程退出 if(pid < 0) { printf("error fork!n"); exit(1); } else if(pid > 0) { exit(0); } // setsid();//子進(jìn)程中創(chuàng)建新會(huì)話 // chdir("/");//改變當(dāng)前目錄為根目錄 openlog("daemon_syslog", LOG_PID, LOG_DAEMON);//打開(kāi)日志服務(wù) if((sid = setsid()) < 0) { syslog(LOG_ERR, "%sn", "setsid");//向日志中寫(xiě)入 exit(1); } if((sid = chdir("/")) < 0) { syslog(LOG_ERR, "%sn", "chdir");//向日志中寫(xiě)入 exit(1); } umask(0);//重新設(shè)置文件權(quán)限 for(i = 0; i < getdtablesize(); i++)//關(guān)閉文件描述 { close(i); } //創(chuàng)建完成正式開(kāi)始守護(hù)進(jìn)程工作 while(1) { if((fd = open("/tmp/daemon.log", O_CREAT|O_WRONLY|O_APPEND, 0600)) < 0){ syslog(LOG_ERR, "open"); exit(1); } write(fd, buf, strlen(buf) + 1); close(fd); sleep(10); } closelog();//關(guān)閉系統(tǒng)日志服務(wù) exit(0); } 本文出自:億恩科技【www.itdijia.com】 服務(wù)器租用/服務(wù)器托管中國(guó)五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |