Linux使用日志系統(tǒng)調試守護進程 |
發(fā)布時間: 2012/8/10 14:56:27 |
守護進程脫離終端控制,在調試時候造成一定不便。可以用syslog服務把程序出錯信息輸入日志文件中。從而可以看出問題所在。
把上次的程序用日志方式改寫。 主要用到三個函數:syslog,openlog,closelog。 守護進程的寫法不變,加入日志服務。 代碼來自華清遠見: #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)建子進程,父進程退出 if(pid < 0) { printf("error fork!n"); exit(1); } else if(pid > 0) { exit(0); } // setsid();//子進程中創(chuàng)建新會話 // chdir("/");//改變當前目錄為根目錄 openlog("daemon_syslog", LOG_PID, LOG_DAEMON);//打開日志服務 if((sid = setsid()) < 0) { syslog(LOG_ERR, "%sn", "setsid");//向日志中寫入 exit(1); } if((sid = chdir("/")) < 0) { syslog(LOG_ERR, "%sn", "chdir");//向日志中寫入 exit(1); } umask(0);//重新設置文件權限 for(i = 0; i < getdtablesize(); i++)//關閉文件描述 { close(i); } //創(chuàng)建完成正式開始守護進程工作 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();//關閉系統(tǒng)日志服務 exit(0); } 本文出自:億恩科技【1tcdy.com】 |