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

关于创建UNIX/Linux daemon进程的笔记

Linux daemon程序简单说就是Linux后台服务进程。

传统的、标准的创建方法:2次fork + setsid

详细步骤

  1. 进程1(父进程)调用fork,创建子进程2,进程1退出。
    1)这个步骤是为第二部做铺垫。
    2)此时,进程1是进程组组长,调用setsid会失败,即无法创建新会话。

  2. 进程2,调用setsid,创建新会话session,目的是脱离进程1所在的session(通常是shell)。
    1)新创建的进程2,不是组长,可以通过setsid创建新会话。进程2不是组长的原因,是因为继承了父进程进程1的pgid(进程1的pid),不是进程2自身pid。
    2)目标是创建一个新session,脱离原来的session。
    3)这样,原session的状态不会影响到daemon进程。
    4)此时进程2是progress group和session的组长,可以获取终端(/dev/tty)。
    如果拥有终端,就会收到终端生命周期的影响,可能收到SIGHUP信号。
    要让daemon断绝一切杂念。

  3. 进程2再次调用fork,创建子进程3,进程2退出。
    1)进程2通过调用setsid成为进程组和session组长,通过fork由进程3继承了pgid和sid。
    2)这样进程3就不是进程组和session的组长,不能调用setsid。
    3)这样确保daemon进程无法获取/dev/tty。
    4)结果是既脱离了session,也脱离的terminal,减少了外部事件的影响。

总结:

(1) 上述几个步骤的目的是让进程脱离原session和terminal终端。
(2) 第一个fork是为调用setsid做准备,创建新session,脱离原session。副作用:成为session和进程组长。
(3)第二次fork是为了消除第二部副作用,不再是组长,不能获得terminal终端。

调用setsid的说明:

  1. 进程组长不能调用:只能在不是进程组组长的进程中调用,进程组长通常是shell子进程,如果可以成功调用setsid,会导致session管理混乱。在组长进程中调用setsid返回-1, EPERM。
  2. 断开原会话和终端:调用setsid后,会断开进程和已有控制终端terminal的关联,断开和原有会话的关联。
  3. 创建新会话并成为组长:成功调用setsid后,创建新会话,调用进程成为会话组长和进程组长。
  4. 在容器中,可能需要CAP_SYS_ADMIN能力,才能调用setsid
  5. 调用setsid,进程中所有线程都会同步切换到新会话,需要确认逻辑正确性。
  6. 通常和fork一起使用,确保子进程不是进程组长
  7. 和systemd的管理方式冲突,如果使用systemd管理的后台服务进程,不用fork+setsid方式创建daemon。

相关文章:

  • 【漫话机器学习系列】217.监督式深度学习的核心法则(Supervised Deep Learning Rule Of Thumb)
  • Spark-Streaming简介和核心编程
  • 【盈达科技GEO优化】向量数据库:人工智能营销时代的核心引擎
  • 【信息安全工程师备考笔记】第二章 网络信息安全概述
  • 门控循环单元(GRU)
  • 基于机器学习的房租影响因素分析系统
  • 力扣面试150题--有效的括号和简化路径
  • STM32 中断系统深度剖析
  • 高并发抢券系统设计与落地实现详解
  • 滴滴-golang后端开发-企业事业部门-二面
  • 黑盒测试——等价类划分法实验
  • 日常记录-logback脱敏
  • 准确--CentOS 7 配置 Chrony 同步阿里云 NTP 时间服务器及手动同步指南
  • 代理设计模式:从底层原理到源代码的详细解释
  • opencv图像的梯度处理,边缘检测
  • 基于国产 FPGA+ 龙芯2K1000处理器+翼辉国产操作系统继电保护装置测试装备解决方案
  • 联邦元学习实现个性化物联网的框架
  • 类加载器与jvm的内存
  • 【数学建模】孤立森林算法:异常检测的高效利器
  • 3.1goweb框架gin下
  • 钟声:美以芬太尼为借口滥施关税,纯属“内病外治”
  • 俄联邦安全局:俄军高级官员汽车爆炸案嫌疑人已被捕
  • 准“90后”山西壶关县委常委、副县长高雅亭赴北京密云挂职
  • 世联行:2024年营业收入下降27%,核心目标为“全面消除亏损公司和亏损项目”
  • 对排出黑烟车辆出具合格报告,广州南沙一检测公司被罚十万元
  • 2025年中央金融机构注资特别国债发行,发行金额1650亿