如何在Linux下创建一个守护进程

我们可以写一个创造守护进程的函数,在程序运行时调用这个函数从而把这个程序变成一个守护进程。
这个函数需要有以下几个步骤:

  1. 子进程等待父进程退出
  2. 子进程使用setsid创建新的会话期,脱离控制台
  3. 调用chdir将当前工作目录设置为/
  4. umask设置为0以取消任何文件权限屏蔽
  5. 关闭所有文件描述符 用sysconf来获取最大的文件描述符个数
  6. 将0、1、2定位到/dev/null
    下面就是一个创建守护进程的函数了。
void create_daemon(void)
{
	pid_t pid = 0;
	
	pid = fork();
	if (pid < 0)
	{
		perror("fork");
		exit(-1);
	}
	if (pid > 0)
	{
		exit(0);
	}
	//setsid将当前进程设置成一个新的会话期session,目的为了让当前进程脱离控制台
	pid = setsid();
	if (pid < 0)
	{
		perror("setsid");
		exit(-1);
	}
	//将当前工作目录设置为根目录
	chdir("/");
	//umask设置为0确保将来进程有最大的文件操作权限
	umask(0);
	//关闭所有文件描述符
	//先要获取当前系统中所允许打开的最大的文件描述符的数目
	int i = 0;
	int cnt = sysconf(_SC_OPEN_MAX);
	for (i = 0; i < cnt; i++)
	{
		close(i);
	}
	open("/dev/null", O_RDWR);
	open("/dev/null", O_RDWR);
	open("/dev/null", O_RDWR);
}

--------------------------本文内容借鉴朱有鹏老师的课程内容-------------------------

你可能感兴趣的:(嵌入式Linux学习)