正是守护进程独立于所有终端控制,因此,他无法向通常那样将信息直接输出到标准输出和标准输出.威力解决这个问题,linux提供了syslog.通过他,守护进程可以向系统log文件写入信息.他在系统库syslog.h中定义如下:
void syslog( priority,char *format,...);
在个进程使用syslog时候,应该先用openlog打开系统纪录.
#
void openlog(const *ident, options, facility);
参数ident是个窜,通常他是名字.
options可以是下面值.
LOG_CONS 如果不能写入LOG值.则直接将其发送给主控台.
LOG_NDELAY 直接建立SYSLOGD进程而不是打开LOG文件
LOG_PERROR 将信息写入LOG同时也发送给标准输出.
LOG_PID 在每个信息中加入PID值.用个
下面用个举例来讲解:
#
#
#
#
# MAXFD 64
{
i;
(fork)
exit(1); /*父进程退出,使子进程成为后台进程*/
sid; /*建立个新进程组,在这个新进程组中,子进程成为这个进程组首进程.这样,该进程就独立于所有终端的外*/
signal(SIGHUP,SIG_IGN); /*忽略SIGHUP信号*/
(fork)
exit(1); /*再次fork,保证该进程不是进程组首进程.*/
chdir("/"); /*改变当前目录,使得进程不和任何文件系统关联*/
unmask(0); /*清除文件掩码,消除进程掩码对其所创建文件影响*/
for(i=0;i close(i); /*关闭所有文件描述符*/
openlog(pname,LOG_PID,facility); /*打开记录*/
最新评论