/*利用syslog服务的守护进程实例*/ /************************************************* 1.守护进程概述 守护进程,通常所说的Daemon进程,常常在系统引导载入时启动, 在系统关闭时终止,大多数后台服务都是通过守护进程实现的。如果 想让某个进程脱离控制终端,那么就必须把这个进程变成一个守护进程。 2.编写守护进程 编写守护进程遵循一个特点的流程,分5个步骤来创建一个简单的守护进程。 (1)创建子进程,父进程退出 (2)在子进程中创建新会话 (3)改变守护进程当前目录为根目录 (4)重设文件权限掩码 (5)关闭文件描述符 ************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <sys/types.h> #include <unistd.h> #include <sys/wait.h> #include <syslog.h> int main(int argc, char * argv [ ]) { pid_t pid,sid; int i, fd; char *buf = "This is a Daemon\n"; pid = fork();//创建子进程 if (pid < 0) { printf("Error fork\n"); exit(1); } else if (pid > 0) { exit(0);//父进程退出 } //打开系统日志服务,openlog openlog("daemon_syslog",LOG_PID,LOG_DAEMON); //setsid()函数使进程完全独立出来,从而脱离所有其他进程的控制 if ((sid = setsid()) < 0) { syslog(LOG_ERR,"%s\n","setsid"); exit(1); } //改变守护进程的当前工作目录 if ((sid = chdir("/")) < 0) { syslog(LOG_ERR,"%s\n","chdir"); exit(1); } //重设文件权限掩码 umask(0); //关闭文件描述符 for (i=0;i<getdtablesize();i++) { close(i); } //这时创建完守护进程,一下开始正式进入守护进程工作 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(); exit(0); }
守护进程
最新推荐文章于 2023-06-21 11:55:08 发布