当前位置: 首页 > news >正文

daemon函数实现原理 守护进程

daemon函数实现原理 守护进程

linux提供了daemon函数用于创建守护进程,实现原理如下:

#include <unistd.h>

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脚本对进程的启动、关闭、重启进行自动管理

posted on 2013-12-14 19:13 RodYang 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/RodYang/p/3474598.html

相关文章:

  • 关于时间管理的一些沉淀
  • jquery-ajax、struts2、json数据问题
  • 说说嵌入式调试方式
  • 创建全文索引的sql语句和测试sql语句执行时间
  • 做软件要尊重事实
  • java中的值传递
  • CDMA学习笔记(一):历史和基本概况
  • 新学习的开始
  • 位图安全仿真系统
  • get 和 post
  • 图像标注说明系统
  • 几个问题
  • C#中获取当前时间:System.DateTime.Now.ToString()用法
  • 【转】Linux上的free命令详解
  • 【转载】理解 Linux 配置文件
  • 【Leetcode】101. 对称二叉树
  • create-react-app项目添加less配置
  • CSS相对定位
  • Meteor的表单提交:Form
  • MQ框架的比较
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • 分享一份非常强势的Android面试题
  • 记一次用 NodeJs 实现模拟登录的思路
  • 讲清楚之javascript作用域
  • 力扣(LeetCode)56
  • 前端每日实战:61# 视频演示如何用纯 CSS 创作一只咖啡壶
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 小程序01:wepy框架整合iview webapp UI
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​比特币大跌的 2 个原因
  • ​如何防止网络攻击?
  • ​香农与信息论三大定律
  • #pragma 指令
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (十一)手动添加用户和文件的特殊权限
  • (四)模仿学习-完成后台管理页面查询
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转) ns2/nam与nam实现相关的文件
  • (转)Linux下编译安装log4cxx
  • (转)大型网站架构演变和知识体系
  • .form文件_SSM框架文件上传篇
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET 8.0 发布到 IIS
  • .NET 设计模式—适配器模式(Adapter Pattern)
  • .NET的数据绑定
  • .NET中使用Protobuffer 实现序列化和反序列化