在linux系统下创建守护进程的原理及步骤在文章(链接如下)中介绍过。http://blog168.chinaunix.net/space.php?uid=20196318&do=blog&id=28738

其实,linux提供了daemon函数用于创建守护进程,实现原理与上文中介绍的是一样的。

#include

int daemon(int nochdir, int noclose);

1. daemon()函数主要用于希望脱离控制台,以守护进程形式在后台运行的程序。

2. 当nochdir为0时,daemon将更改进城的根目录为root(“/”)。

3. 当noclose为0是,daemon将进城的STDIN, STDOUT, STDERR都重定向到/dev/null。

daemon的实现大致如下:

int daemon( int nochdir,  int noclose )
{
   pid_t pid;
   if ( !nochdir && chdir("/") != 0 ) //如果nochdir=0,那么改变到"/"根目录
       return -1;
   
   if ( !noclose ) //如果没有noclose标志
   {
        int fd = open("/dev/null", O_RDWR); 
        if ( fd  <  0 )
            return -1;

/* 重定向标准输入、输出、错误 到/dev/null,

键盘的输入将对进程无任何影响,进程的输出也不会输出到终端

*/

dup(fd, 0);

dup(fd, 1);

dup(fd, 2);

close(fd);

}

pid = fork();  //创建子进程.
   if (pid  <  0)  //失败
      return -1;
   if (pid > 0)
       _exit(0); //返回执行的是父进程,那么父进程退出,让子进程变成真正的孤儿进程.

//创建的 daemon子进程执行到这里了
   if ( setsid()  < 0 )   //创建新的会话,并使得子进程成为新会话的领头进程
      return -1;
   return 0;  //成功创建daemon子进程
}

使用实例:

int main()

{

daemon(1, 1); //参数根据需求确定

/*  在这里添加你需要在后台做的工作代码  */

}

如何杀死这样的进程:

通过ps+grep找到对应的后台进程,使用kill命令将进程杀死;也可创建shell脚本对进程的启动、关闭、重启进行自动管理

转载于:https://www.cnblogs.com/fnlingnzb-learner/p/6743336.html

daemon函数的原理及使用详解相关推荐

  1. python字符串strip的作用_Python字符串函数strip()原理及用法详解

    Python字符串函数strip()原理及用法详解 strip:用于移除字符串头尾指定的字符(默认为空格)或字符序列.注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符. 语法:str.s ...

  2. python的编程模式-Python设计模式之状态模式原理与用法详解

    本文实例讲述了Python设计模式之状态模式原理与用法.分享给大家供大家参考,具体如下: 状态模式(State Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类 ...

  3. DeepLearning tutorial(1)Softmax回归原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43157801 DeepLearning tutorial(1)Softmax回归原理简介 ...

  4. DeepLearning tutorial(3)MLP多层感知机原理简介+代码详解

    FROM:http://blog.csdn.net/u012162613/article/details/43221829 @author:wepon @blog:http://blog.csdn.n ...

  5. DeepLearning tutorial(4)CNN卷积神经网络原理简介+代码详解

    FROM: http://blog.csdn.net/u012162613/article/details/43225445 DeepLearning tutorial(4)CNN卷积神经网络原理简介 ...

  6. Pytorch|YOWO原理及代码详解(二)

    Pytorch|YOWO原理及代码详解(二) 本博客上接,Pytorch|YOWO原理及代码详解(一),阅前可看. 1.正式训练 if opt.evaluate:logging('evaluating ...

  7. batchnorm原理及代码详解

    转载自:http://www.ishenping.com/ArtInfo/156473.html batchnorm原理及代码详解 原博文 原微信推文 见到原作者的这篇微信小文整理得很详尽.故在csd ...

  8. Spark SQL原理及常用方法详解(二)

    Spark SQL 一.Spark SQL基础知识 1.Spark SQL简介 (1)简单介绍 (2)Datasets & DataFrames (3)Spark SQL架构 (4)Spark ...

  9. 【胖虎的逆向之路】04——脱壳(一代壳)原理脱壳相关概念详解

    [胖虎的逆向之路]04--脱壳(一代壳)原理&脱壳相关概念详解 [胖虎的逆向之路]01--动态加载和类加载机制详解 [胖虎的逆向之路]02--Android整体加壳原理详解&实现 [胖 ...

最新文章

  1. 科大星云诗社动态20201221
  2. 做时间序列预测有必要用深度学习吗?梯度提升回归树媲美甚至超越多个DNN模型...
  3. 进程调度实验_进程运行及其调度
  4. C51 printf修改如何能打印到不同的设备呢?
  5. 2018-2019 ACM-ICPC, Asia Shenyang Regional Contest E. The Kouga Ninja Scrolls 切比雪夫距离 +线段树
  6. 帝国cms 未审核 showinfo.php,帝国CMS批量修改文章未审核状态及批量修改上线时间...
  7. 如何设置mysql字符集支持utf-8 和gbk_如何设置Mysql数据库默认的字符集编码为GBK...
  8. MongoDB:有人敢像我一样说出开源的真实用意吗?
  9. “深度学习已死,可微编程万岁!”LeCun老师为何又语出惊人?
  10. 零基础跨行学习Java是否可行
  11. 用什么的SQL语句来查的一个表中有相同的记录条数
  12. 浏览器出现ERR_PROXY_CONNECTION_FAILED 错误代码
  13. 第27天 LDT与库
  14. mysql mtq_mysql高级复习 - osc_r3mtqivi的个人空间 - OSCHINA - 中文开源技术交流社区
  15. 一张图看懂阿里云网络产品[七]共享流量包
  16. Android分享文件到qq没反应,Android 微信,qq分享文件
  17. uni-app插入ucharts(echarts)图表,支持H5,APP,小程序
  18. 13.3断流_BUG全军覆没!苹果iOS13.3正式推送:4G断流、后台闪退统统解决
  19. 发展人脑连接组计划中(dHCP)婴儿扩散 MRI 的自动化处理流程
  20. adis16448与MPU6050 无人机飞行对比测试

热门文章

  1. TensorFlow Lite支持设备内置会话建模
  2. c++ split 方法(转)
  3. 【算法导论】学习笔记——第16章 贪心算法
  4. Adblock Plus cjxlist 规则说明与反馈贴
  5. 【知识小课堂】 mongodb 之字段中的【 数组】、【内嵌文档】
  6. Error:Execution failed for task ':dexDebug'
  7. 命令行command更新android sdk + gradle设置代理
  8. Service生命周期
  9. 接口继承中一个常见问题的思考
  10. Android Studio常用Plugin及 手动安装 Plugins