守护进程 demo程序

/* daemon.c 创建守护进程实例 */
/* 守护进程,是Linux中的后台服务进程。生存期长,独立于控制台,周期性地执行任务或者等待处理某些事件。
 * 守护进程常在系统引导载入时启动,在系统关闭时终止。Linux的系统服务大多是通过守护进程实现的
 * 守护进程脱离了对控制终端的依赖,
 * */
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/wait.h>

int main()
{
	pid_t pid;
	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);/* 父进程退出 */
	}
	setsid(); /* 创建一个新会话,拜托原会话和原控制终端的控制,使得子进程完全独立出来 */
	chdir("/"); /* 让守护进程的当前工作目录为根目录。由于子进程继承了父进程的当前工作目录,那么子进程及守护进程运行期间,工作目录是不能卸载的,这会给系统使用造成很多麻烦。 */
	umask(0); /* 改变文件权限掩码为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 )
		{
			printf("Open file error!\n");
			exit(1);
		}
		write(fd,buf,strlen(buf)+1);
		close(fd);
		sleep(10);
	}
	exit(0);
	
}


©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页