Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5744069
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2006-12-04 11:05:39

1  基本概念

  • 守护进程就是在后台执行, 没有控制终端或登录 Shell 的进程

2  实现方法

  1. 关闭文件描述符: for (i=0; i < NOFILE; i++) close (i);
  2. 甩开控制终端: 打开 /dev/tty, 然后用 ioctl 该文件上执行 TIOCNOTTY 命令
  3. 脱离会话和进程组
  4. ===============================================================================
    * 使用 setsid 设置为新会话的领头进程
    * 因为 setsid 要求调用进程不是会话的领头进程时才有效.
    * 因此, 首先可用 fork 派生, 并结束父进程.
    * 之后调用 setsid, 子进程成为新会话的领头进程, 从而与原有会话, 进程组, tty 脱离.
    * 但是, 为避免作为新会话领头进程的子进程在打开一个终端设备时, 拥有一个控制终端.
    * 再次派生, 并结束父进程, 可让子进程成为非会话领头进程.

    ---------------------------------------
    if (fork ())
    exit (0);

    setsid ();

    if (fork ())
    exit (0);
    ===============================================================================
  5. 改变工作目录到根目录: chdir ("/")
  6. 进程的 umask 设置为 0: umask (0)
  7. 处理 SIGCHLD 信号, 为避免形成僵尸进程
阅读(2619) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~