#include <sys/stat.h>
#include <fcntl.h>
/* Bit-mask values for 'flags' argument of becomeDaemon() */ #define BD_NO_CHDIR 01 /* Don't chdir("/") */
#define BD_NO_CLOSE_FILES 02 /* Don't close all open files */
#define BD_NO_REOPEN_STD_FDS 04 /* Don't reopen stdin, stdout, and
stderr to /dev/null */
#define BD_NO_UMASK0 010 /* Don't do a umask(0) */ #define BD_MAX_CLOSE 8192 /* Maximum file descriptors to close if
sysconf(_SC_OPEN_MAX) is indeterminate */
int becomeDaemon(int flags) /* Returns 0 on success, -1 on error */ {
int maxfd, fd; switch (fork()) /* Become background process */
{
case -: return -;
case : break; /* Child falls through... */
default: _exit(EXIT_SUCCESS); /* while parent terminates */
} if (setsid() == -) /* Become leader of new session */
return -; switch (fork()) { /* Ensure we are not session leader */
case -: return -;
case : break;
default: _exit(EXIT_SUCCESS);
} if (!(flags & BD_NO_UMASK0))
umask(); /* Clear file mode creation mask */ if (!(flags & BD_NO_CHDIR))
chdir("/"); /* Change to root directory */ if (!(flags & BD_NO_CLOSE_FILES)) { /* Close all open files */
maxfd = sysconf(_SC_OPEN_MAX);
if (maxfd == -) /* Limit is indeterminate... */
maxfd = BD_MAX_CLOSE; /* so take a guess */ for (fd = ; fd < maxfd; fd++)
close(fd);
} if (!(flags & BD_NO_REOPEN_STD_FDS)) {
close(STDIN_FILENO); /* Reopen standard fd's to /dev/null */ fd = open("/dev/null", O_RDWR); if (fd != STDIN_FILENO) /* 'fd' should be 0 */
return -;
if (dup2(STDIN_FILENO, STDOUT_FILENO) != STDOUT_FILENO)
return -;
if (dup2(STDIN_FILENO, STDERR_FILENO) != STDERR_FILENO)
return -;
} return ;
}

最新文章

  1. 解决gradle /Users/xxxx/Documents/workspace/fontmanager/.gradle/2.2.1/taskArtifacts/cache.properties (No such file or directory)报错办法
  2. canvas绘制文字
  3. Js 日期操作
  4. mac下8080端口到80端口的转发
  5. Google搜索技术
  6. 初次踏上GUI编程之路(有点意思,详细介绍了菜鸟的学习之路)
  7. bzoj1684 [Usaco2005 Oct]Close Encounter
  8. 正式学习React(一) 开始学习之前必读
  9. application(expand)--easyui
  10. DB2常用sql demo
  11. javascript 基础系列(一)
  12. Maven坐标机制
  13. Android第三次作业
  14. Linux并发与同步专题 (2)spinlock
  15. unity3d平铺图片
  16. LeetCode--349--两个数组的交集
  17. .NET异步多线程,Thread,ThreadPool,Task,Parallel,异常处理,线程取消
  18. 提高PHP编码的一些技巧
  19. C#字符串中特殊字符的转义
  20. hadoop招聘需求每天都在添加,短短半个月时间,需求量差点儿翻了一番,这是大数据要爆发的节奏么?

热门文章

  1. hadoop参数配置
  2. 1.rs.first()、rs.last()、rs.next()、rs.getRow()
  3. js--闭包的理解
  4. aps.net 页面事件执行顺序
  5. DD应用实例
  6. awk 中 FS的用法
  7. chapter11_1 Lua数组、列表
  8. python 进制 转换
  9. 【Machine Learning in Action --3】决策树ID3算法
  10. lucene 索引创建步骤