如何创建一个简单的守护进程

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <time.h>

void daemon_init(void)
{
	pid_t pid;
	// 1, 创建子进程
	if((pid = fork()) < 0){
		perror("fork");
		exit(1);
	}else if(pid)
		exit(0);

	// 2, 创建会话
	if(setsid() < 0){
		perror("setsid");
		exit(1);
	}

	// 3, 再创建子进程
	if((pid = fork()) < 0){
		perror("fork");
		exit(1);
	}else if(pid)
		exit(0);

	// 4, 关闭继承父进程的文件描述符
	int i,max_fd = sysconf(_SC_OPEN_MAX);
	for (i = 0; i < max_fd;i++)
		close(i);

	// 5, 重定向标准输入,标准输入,标准错误
	open("/dev/null",O_RDWR);
	dup(0);
	dup(0);

	// 6, 设置守护进程的工作目录
	chdir("/");

	// 7, 消除umask影响
	umask(0);
}
int main(void)
{
	daemon_init();  //初始化守护进程
	/*****************下面为守护进程执行的代码*******************/
	//每隔一秒钟向文件中写一条时间信息
	FILE *fp = fopen("1.txt","a+");
	time_t tm;
	char buf[100];

	while(1){
		time(&tm);
		sprintf(buf,"%s",ctime(&tm));
		fputs(buf,fp);
		fflush(fp);
		sleep(1);
	}

	return 0;
}

在linux系统中,我们可以创建一个简单的守护进程在后台执行,满足自己的程序在进行时,守护进程也同样可以启动。

守护进程(Daemon Process),也就是通常说的 Daemon 进程(精灵进程),是 Linux 中的后台服务进程。它是一个生存期较长的进程,通常独立 
于控制终端并且周期性地执行某种任务或等待处理某些发生的事件。

  守护进程是个特殊的孤儿进程,这种进程脱离终端,为什么要脱离终端呢?之所以脱离于终端是为了避免进程被任何终端所产生的信息所打断,其在 
执行过程中的信息也不在任何终端上显示。由于在 linux 中,每一个系统与用户进行交流的界面称为终端,每一个从此终端开始运行的进程都会依 
附于这个终端,这个终端就称为这些进程的控制终端,当控制终端被关闭时,相应的进程都会自动关闭。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值