守护进程创建

// 程序启动时默认打开三个I/O设备文件:标准输入文件stdin,标准输出文件stdout,
//标准错误输出文件stderr,分别得到文件描述符 0, 1, 2
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
void daemonize(void)
{
	pid_t pid;
	/*
	* 成为一个新会话的首进程,失去控制终端
	*/
	if ((pid = fork()) < 0) {
	perror("fork");
	exit(1);
	} else if (pid != 0) /* parent */
	exit(0);
	setsid();
	/*
	* 改变当前工作目录到/目录下.
	*/
	if (chdir("/") < 0) {
	perror("chdir");
	exit(1);
	}
	/* 设置umask为0 */
	umask(0);
	/*
	* 重定向0,1,2文件描述符到 /dev/null,因为已经失去控制终端,再操作0,1,2没有意义.
	*/
	close(0);
	open("/dev/null", O_RDWR);
	dup2(0, 1);
	dup2(0, 2);
}
int main(void)
{
	daemonize();
	while(1); /* 在此循环中可以实现守护进程的核心工作 */
}

猜你喜欢

转载自blog.csdn.net/qq_22753933/article/details/83650543