1、任何一个进程都可以将自己实现成一个守护进程

2、create_daemon函数要素

(1)、子进程要等待父进程退出

(2)、子进程使用setsid创建新的会话期,脱离控制台

(3)、调用chdir将当前工作目录设置为/

(4)、umask设置为0以取消任何文件权限屏蔽

(5)、关闭所有文件描述符

(6)、将进程0、1、2定位到/dev/null

 #include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
void creat_daemon(void);
int main(void)
{
creat_daemon();
while()
{
printf(" i am running\n");
sleep();
} return ;
} void creat_daemon(void)
{
pid_t pid =; pid = fork();
if(pid < )
{
perror("fork");
exit(-);
}
if(pid > )
{
exit(); //父进程直接退出
}
//能够执行到到这里的就是子进程了 //setsid将当前进程设置为一个新的会话期session,
//目的就是让当前进程脱离控制台
pid = setsid();
if(pid < )
{
perror("setsid");
exit(-);
}
//将当前进程工作目录设置为根目录
chdir("/");
//umask设置为0确保将来进程有最大的文件操作权限
umask();
//关闭所有文件描述符
//先要获取当前系统中所允许打开的最大文件描述符数目
int cnt = sysconf(_SC_OPEN_MAX);
int i = ;
for(i = ; i < cnt; i++)
{
close(i);
}
open("/dev/null", O_RDWR);//打开进程0,将其定位到/dev/null
open("/dev/null", O_RDWR);//打开进程1,将其定位到/dev/null
open("/dev/null", O_RDWR);//打开进程2,将其定位到/dev/null
}

最新文章

  1. SqlDateTime overflow. Must be between 1/1/1753 12:00:00 AM and 12/31/9999 11:59:59 PM.
  2. js中Number数字数值运算后值不对
  3. jQuery(一)delegate() 方法
  4. Log4j配置全说明
  5. Binary Numbers(HDU1390)
  6. oracle11g用户名密码不区分大小写
  7. NYOJ 300 &amp;amp;&amp;amp; hdu 2276 Kiki &amp;amp; Little Kiki 2 (矩阵高速功率)
  8. GO interface显示类型转换方法
  9. 【Egret】Wing3发布移动APP功能,打包APK流程以及会遇到的问题
  10. SpringCloud的应用发布(一)SpringCloud的样例工程
  11. mutex,thread
  12. LARS 最小角回归算法简介
  13. 【XSY2753】Lcm 分治 FWT FFT 容斥
  14. HTML 滚动条样式修改
  15. nginx转发swoole以及nginx负载
  16. python线程join
  17. Hadoop本地安装
  18. 学习《深入理解C#》—— 可空类型、可选参数和默认值 (第一章1.3)
  19. Java-Runoob:Java 异常处理
  20. Young Maids

热门文章

  1. Elasticsearch 删除文档
  2. mysql 手动把字段设置为null
  3. Channel详解
  4. POJ 3311 Hie with the Pie 最短路+状压DP
  5. DRF源码-fields.py
  6. MySLQ排序后标记排行
  7. 将本地项目映射到外网(tomcat web项目)
  8. C++ 一个exe的两个运行实例之间共享数据
  9. Java多线程之并发包,并发队列
  10. 使用那各VUE的打印功能(print.js)出现多打印一个空白页的问题