Chinaunix首页 | 论坛 | 博客
  • 博客访问: 68758
  • 博文数量: 30
  • 博客积分: 1260
  • 博客等级: 中尉
  • 技术积分: 285
  • 用 户 组: 普通用户
  • 注册时间: 2010-06-03 12:27
文章分类

全部博文(30)

文章存档

2010年(30)

我的朋友

分类: LINUX

2010-08-17 15:26:59

以下内容根据baidu结果修改
 

编写Linux系统下Daemon程序的方法步骤

一、引言 Daemon程序是一直运行的服务端程序,又称为守护进程。

   本文介绍了在Linux下编写Daemon程序的步骤,并给出了例子程序。

二、Daemon程序简介

   Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的Daemon程序称作守护进程。

三、Daemon程序编写规则

   编写Daemon程序有一些基本的规则,以避免不必要的麻烦。

  1、首先是程序运行后调用fork,并让父进程退出。子进程获得一个新的进程ID,但继承了父进程的进程组ID。

  2、调用setsid创建一个新的session,使自己成为新session和新进程组的leader,并使进程没有控制终端(tty)。

  3、改变当前工作目录至根目录,以免影响可加载文件系统。或者也可以改变到某些特定的目录。

  4、设置文件创建mask为0,避免创建文件时权限的影响。

  5、关闭不需要的打开文件描述符。因为Daemon程序在后台执行,不需要于终端交互,通常就关闭STDIN、STDOUT和STDERR。其它根据实际情况处理。

  另一个问题是Daemon程序不能和终端交互,也就无法使用printf方法输出信息了。我们可以使用syslog机制来实现信息的输出,方便程序的调试。在使用syslog前需要首先启动syslogd程序,关于syslogd程序的使用请参考它的man page,或相关文档,我们就不在这里讨论了。

int init_daemon(void)
{
  pid_t pid;
  int i;

  if((pid = fork()) < 0)
    return -1;

  else if(pid != 0)
    exit(0);//退出父进程

  setsid();

  for(i=0;i< NOFILE ;++i)
    close(i);
 
  umask(0);
  return 0;
}


阅读(713) | 评论(2) | 转发(0) |
0

上一篇:NAPI 技术在 Linux 网络驱动上的应用和完善

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2010-08-20 10:53:50

很好啊, 收藏了 推荐一个博客,提供很多免费电子书下载: http://free-ebooks.appspot.com

chinaunix网友2010-08-17 16:12:28

umask是怎么用的呢? umask用来设置文件及目录的默认权限, r(4)、w(2)、r(1) 比如 umask 002 则user和group没有拿掉属性,而others拿掉了2分,即others不具有写的属性。