1. #include <sys/stat.h>
  2. #include <fcntl.h>
  3. /* Bit-mask values for 'flags' argument of becomeDaemon() */
  4.  
  5. #define BD_NO_CHDIR 01 /* Don't chdir("/") */
  6. #define BD_NO_CLOSE_FILES 02 /* Don't close all open files */
  7. #define BD_NO_REOPEN_STD_FDS 04 /* Don't reopen stdin, stdout, and
  8. stderr to /dev/null */
  9. #define BD_NO_UMASK0 010 /* Don't do a umask(0) */
  10.  
  11. #define BD_MAX_CLOSE 8192 /* Maximum file descriptors to close if
  12. sysconf(_SC_OPEN_MAX) is indeterminate */
  13. int becomeDaemon(int flags) /* Returns 0 on success, -1 on error */
  14.  
  15. {
  16. int maxfd, fd;
  17.  
  18. switch (fork()) /* Become background process */
  19. {
  20. case -: return -;
  21. case : break; /* Child falls through... */
  22. default: _exit(EXIT_SUCCESS); /* while parent terminates */
  23. }
  24.  
  25. if (setsid() == -) /* Become leader of new session */
  26. return -;
  27.  
  28. switch (fork()) { /* Ensure we are not session leader */
  29. case -: return -;
  30. case : break;
  31. default: _exit(EXIT_SUCCESS);
  32. }
  33.  
  34. if (!(flags & BD_NO_UMASK0))
  35. umask(); /* Clear file mode creation mask */
  36.  
  37. if (!(flags & BD_NO_CHDIR))
  38. chdir("/"); /* Change to root directory */
  39.  
  40. if (!(flags & BD_NO_CLOSE_FILES)) { /* Close all open files */
  41. maxfd = sysconf(_SC_OPEN_MAX);
  42. if (maxfd == -) /* Limit is indeterminate... */
  43. maxfd = BD_MAX_CLOSE; /* so take a guess */
  44.  
  45. for (fd = ; fd < maxfd; fd++)
  46. close(fd);
  47. }
  48.  
  49. if (!(flags & BD_NO_REOPEN_STD_FDS)) {
  50. close(STDIN_FILENO); /* Reopen standard fd's to /dev/null */
  51.  
  52. fd = open("/dev/null", O_RDWR);
  53.  
  54. if (fd != STDIN_FILENO) /* 'fd' should be 0 */
  55. return -;
  56. if (dup2(STDIN_FILENO, STDOUT_FILENO) != STDOUT_FILENO)
  57. return -;
  58. if (dup2(STDIN_FILENO, STDERR_FILENO) != STDERR_FILENO)
  59. return -;
  60. }
  61.  
  62. return ;
  63. }

linux 守护进程创建流程的更多相关文章

  1. Linux 守护进程创建原理及简易方法

    1:什么是Linux下的守护进程 Linux daemon是运行于后台常驻内存的一种特殊进程,周期性的执行或者等待trigger执行某个任务,与用户交互断开,独立于控制终端.一个守护进程的父进程是in ...

  2. Linux 守护进程创建

    1. 守护进程: 是Linux中的后台服务进程.它是一个生存期较长的进程,通常独立于控制终端并且周期性的执行某种任务或等待处理某些发生的事件.守护进程常常在系统启动时开始运行,在系统关闭时终止 2. ...

  3. .NET跨平台实践:用C#开发Linux守护进程

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  4. .NET跨平台实践:用C#开发Linux守护进程(转)

    Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon也能在后台正常工作. 一句话,为L ...

  5. [转]❲阮一峰❳Linux 守护进程的启动方法

    ❲阮一峰❳Linux 守护进程的启动方法 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的由来 ...

  6. Server Develop (七) Linux 守护进程

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

  7. Linux守护进程的编程实现

    Linux 守护进程的编程方法 守护进程(Daemon)是执行在后台的一种特殊进程.它独立于控制终端而且周期性地执行某种任务或等待处理某些发生的事件.守护进程是一种非常实用的进程.Linux的大多数s ...

  8. C#开发Linux守护进程

    用C#开发Linux守护进程   Linux守护进程(Daemon)是Linux的后台服务进程,它脱离了与控制终端的关联,直接由Linux init进程管理其生命周期,即使你关闭了控制台,daemon ...

  9. 笔记整理--Linux守护进程

    Linux多进程开发(三)进程创建之守护进程的学习 - _Liang_Happy_Life__Dream - 51CTO技术博客 - Google Chrome (2013/10/11 16:48:2 ...

随机推荐

  1. PAT 团体程序设计天梯赛-练习集 L1-015. 跟奥巴马一起画方块

    美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统.2014年底,为庆祝“计算机科学教育周”正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正 ...

  2. Fedora设置中文

    安装Fedora14时,界面语言是英语,结果忘了修改酿成大祸,hou后面qt怎么改 也显示不出来中文!哎,真是功亏一篑啊差点. 只好手动安装简体中文语言包: 1.打开终端,执行yum install ...

  3. javascript表单操作

    通过遍历获得列表中被勾选的元素 $("#singcms-push").click(function(){ var id = $("#select-push"). ...

  4. java 邮件收发 (只能输入英文,中文需要转码)

    //发件 package com.sun.mail;import java.io.UnsupportedEncodingException;import java.util.Properties;im ...

  5. 原生态 php连接mysql

    <?php$host = 'localhost';$user = 'root';$pass = '';$dbname = 'test';$con = mysql_connect($host,$u ...

  6. MVC3+EF4.1学习系列(十一)----EF4.1常见的问题解决

    博客写了10篇了~有很多朋友私信问了一些问题,而且很多问题 大家问的都一样 这里说说这些常见问题的解决办法.如果大家有更好的解决办法~也希望分享出来 问题大概为这几个 一.ef4.1 codeFirs ...

  7. idea 注册码

    生成地址:http://idea.lanyus.com/ ------------------------------------- IntelliJ IDEA 注册码 *.lanyus.com及*. ...

  8. NOIP2010-普及组复赛-第四题-三国游戏

    题目描述 Description 小涵很喜欢电脑游戏,这些天他正在玩一个叫做<三国>的游戏.  在游戏中,小涵和计算机各执一方,组建各自的军队进行对战.游戏中共有 N 位武将(N为偶数且不 ...

  9. 斯坦福大学公开课:iOS 7应用开发 笔记

    2015-07-06 第一讲   课务.iOS概述 -------------------------------------------------- 开始学习斯坦福大学公开课:iOS 7应用开发留 ...

  10. php 链接 sqlserver 2005以上版本数据库

    <?php /** * 数据库管理 * * @author wangaibo168@163.com * @charset utf-8 * 不支持sqlserver2005(包括)以下的版本 */ ...