0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

编写daemon进程需要遵循哪些规则?

Linux爱好者 来源:Linux爱好者 作者:Liao Tonglang 2020-12-07 16:24 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Daemon 进程生命周期长且在后台运行。编写daemon进程需要遵循哪些规则呢?

1、执行fork()函数,父进程退出,子进程继续

执行这一步,原因有两个:

父进程可能是进程组的组长,从而不能够执行后面要执行的setsid函数。

子进程继承了父进程的进程组ID,一定不会是进程组组长,所以子进程一定可以执行setsid。

如果daemon是从终端命令行启动的,那么父进程退出后,shell会显示shell提示符,让子进程在后台执行。

2、子进程执行下面三个步骤

修改当前目录为根目录 如果当前工作路径上包含根文件系统以外的文件系统,那么这个文件系统将不能被卸载。

当然也可以改成其它合适的目录。这里使用函数chdir("/")。

调用setsid 这是为了切断与控制终端的所有关系,创建一个新的会话。

此时无论终端是否发送SIGIN、SIGQUIT或者SIGTSTP或者断开,都与daemon进程无关。

使用umask(0)设置文件模式创建掩码为0 这一步的目的是让daemon进程创建文件的权限属性与shell脱离关系。

因为默认情况下,进程的umask来源于父进程shell的umask。如果不执行umask(0),那么父进程的shell就会影响daemon,造成daemon每次执行的umask信息不一致。

3、再次执行fork,父进程退出,子进程继续

执行完前面两步之后,新建了会话,进程是会话的首进程,也是进程组的首进程;进程ID,进程组ID,会话ID相同;进程和终端失去联系。

但是还差一步。daemon进程有可能会打开一个终端设备:

intfd=open("/dev/console",O_RDWR);这个设备是否会成为daemon进程的控制终端,取决于两点:

daemon进程是不是会话的首进程。

系统实现。(BSD的实现不会成为daemon的控制终端,但POSIX由具体实现决定)。

为了万无一失,需要使用fork()确保daemon不是会话的首进程。

4、关闭stdin,stdout,stderr

关闭之后应该打开/dev/null将0,1,2描述符指向它。这是为了防止后面执行0,1,2上的I/O时出现错误。

C库的daemon函数和这个流程相似,但没有第二次fork。

原文标题:Daemon 进程的创建

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    90

    文章

    3707

    浏览量

    96736
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66812

原文标题:Daemon 进程的创建

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    FT62FC6X 8位微控制器型号命名规则,引脚介绍及PORT端口结构框图

    FT62FC6X系列的型号命名规则、引脚介绍以及PORT端口结构框图,帮助读者更好地理解和应用这一系列微控制器。   FT62FC6X型号命名规则 FT62FC6X系列微控制器的型号命名遵循了一套严格的
    的头像 发表于 09-18 16:22 615次阅读
    FT62FC6X 8位微控制器型号命名<b class='flag-5'>规则</b>,引脚介绍及PORT端口结构框图

    【HZ-T536开发板免费体验】—— linux 进程创建

    Linux进程通信方式有这几种: 1。管道 2。信号量 3。消息队列 4。共享内存 在本帖子中,我会讲解fork(),exit()系统调用的实践。通过应用编程来实现系统调用。 1,进程创建 打开
    发表于 09-01 20:49

    请问DTU的设备号都在什么情况下需要填写,填写的规则是什么?

    DTU的设备号都在什么情况下需要填写,填写的规则是什么?
    发表于 08-07 07:50

    KiCad 中的自定义规则(KiCon 演讲)

    设计规则 展开,重点探讨了 那些复杂却强大的特性。 由于这些规则本质上是基于文本表达的,需要用户细致入微的理解。演讲的 核心目标 是引导用户有效实施这些规则,从而 规避布线问题、提升制
    的头像 发表于 06-16 11:17 1450次阅读
    KiCad 中的自定义<b class='flag-5'>规则</b>(KiCon 演讲)

    需要遵循哪些步骤才能在协同处理器模式下配置 FX2/FX3?

    FX2/FX3 替换 CY7C67300。 我们需要遵循哪些步骤才能在协同处理器模式下配置 FX2/FX3? 1。是否需要单独编程 FX2/FX3 才能与我们的主控制器接口? 2。GPIF II 支持并行总线接口吗?
    发表于 05-26 07:58

    Linux系统进程管理入门指南

    在 Linux 系统中,进程是正在运行的程序的实例。理解进程的管理、查看和控制对于系统管理员和开发者来说非常重要
    的头像 发表于 04-22 14:34 852次阅读
    Linux系统<b class='flag-5'>进程</b>管理入门指南

    2025年村田电感型号命名规则深度解析

    最新命名逻辑。 一、基础结构解析 村田电感型号由 12位字符 组成,遵循“LQ+结构+尺寸+应用+类别+电感值+精度+特征+电极+包装”的编码规则。例如,典型型号“LQH32MN331K23L”可拆解为: LQ :片状线圈(型号标识) H :绕线型(铁氧体磁芯结构
    的头像 发表于 04-15 14:29 1326次阅读

    需要点表≠无规则!深控技术工业网关的智能数据映射技术

    在工业数据采集领域,“无点表”常被误解为数据采集的“无序化”,而深控技术通过动态数据建模与语义化标签自动生成技术,重新定义了工业数据治理的规则体系。
    的头像 发表于 04-11 15:21 462次阅读
    不<b class='flag-5'>需要</b>点表≠无<b class='flag-5'>规则</b>!深控技术工业网关的智能数据映射技术

    Linux进程状态详解

    进程状态是task_struct内的一个整数;进行:进程在调度队列中,进程的状态都是running,阻塞:等待某种设备或者资源就绪。进程是一个队列,设备也是一个队列,当我们读磁盘,读网
    的头像 发表于 04-01 09:46 803次阅读
    Linux<b class='flag-5'>进程</b>状态详解

    如何在特定区域设置线宽、线距规则

    Courtyard 区域范围内所有对象需要满足的宽度和间隙规则:最小 0.1 mm   (version 1)(rule "渐变线宽"(constraint track_width (min
    的头像 发表于 03-19 11:20 1046次阅读
    如何在特定区域设置线宽、线距<b class='flag-5'>规则</b>

    请问如何在Python中实现多线程与多进程的协作?

    大家好!我最近在开发一个Python项目时,需要同时处理多个任务,且每个任务需要不同的计算资源。我想通过多线程和多进程的组合来实现并发,但遇到了一些问题。 具体来说,我有两个任务,一个是I/O密集型
    发表于 03-11 06:57

    使用HDDL卡运行OpenVINO应用程序容器或HDDL daemon容器时遇到错误,怎么解决?

    说明在使用 HDDL 卡运行OpenVINO应用程序容器或 HDDL daemon 容器时遇到错误: 错误: shm_open() failed: errno=2 (No such file
    发表于 03-05 08:11

    如何确保PCBA板加工质量?这些规则不能少!

    焊接和测试,形成具有特定功能的电子模块。由于PCBA板加工涉及多个步骤和工艺,因此需要遵循严格的规则以确保产品质量和生产效率。
    的头像 发表于 02-18 17:46 730次阅读

    村田代理商告诉你贴片电容选用的规则

    在选择贴片电容时,需要遵循一系列一般规则,以确保所选电容能够满足电路的设计需求并具备较高的可靠性和稳定性。以下是一些关键的选用规则: 一、电路需求分析 确定电容的作用: 首先要明确贴片
    的头像 发表于 12-23 15:09 695次阅读

    深入解析Linux程序与进程

    关于某个数据集合的一次运行活动。作为系统进行资源分配和调度的基本单位,是操作系统结构的基础。 程序与进程的关系 进程的状态 基础进程状态 创建状态:进程在创建时
    的头像 发表于 12-18 11:01 829次阅读
    深入解析Linux程序与<b class='flag-5'>进程</b>