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

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

    关注

    88

    文章

    3592

    浏览量

    93596
  • 函数
    +关注

    关注

    3

    文章

    4306

    浏览量

    62431

原文标题:Daemon 进程的创建

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

收藏 人收藏

    评论

    相关推荐

    芯盾时代参与编写零信任相关标准

    参加会议,就《标准》草案展开全面、深度的讨论,并明确了下一阶段的工作计划和目标。《标准》的编写工作取得了重要进展,编写进程稳步、有序推进。
    的头像 发表于 11-05 11:07 467次阅读

    改造数据中心需要遵循这五大规则

    在数据中心改造过程中,数据存储问题可能是最艰巨的障碍,以下关于实现数据中心的改造的五大规则,可能会对您有所启发。   1.使存储虚拟化更容易 为了实现数据中心的改造,首先实现存储虚拟化。但是,这项
    的头像 发表于 10-31 11:02 114次阅读

    【软件干货】Android应用进程如何保活?

    在Android应用程序中,为了保证应用的正常运行和稳定性,有时需要对应用进程进行保活。以下是一些实现进程保活的方法:
    的头像 发表于 10-15 17:05 289次阅读
    【软件干货】Android应用<b class='flag-5'>进程</b>如何保活?

    【每天学点AI】五个阶段带你了解人工智能大模型发展史!

    20世纪50年代NLP的早期研究主要基于规则的方法,依赖于语言学专家手工编写规则和词典。这些规则通常是关于语法、语义和句法结构的人工规则
    的头像 发表于 09-25 16:51 409次阅读
    【每天学点AI】五个阶段带你了解人工智能大模型发展史!

    高速pcb布线规则有哪些

    高速pcb布线规则有哪些 高速PCB布线规则 摘要:随着电子技术的快速发展,高速PCB设计变得越来越重要。为了确保信号完整性和电磁兼容性,遵循一定的布线规则至关重要。本文将详细介绍高速
    的头像 发表于 06-10 17:33 759次阅读

    嵌入式系统中C语言的编写规范

    最重要的一条规则 编写代码时最重要的一条规则是:检查周围的代码并尝试模仿它。 作为维护人员,如果收到的补丁明显与周围代码的编码风格不同,这是令人沮丧的。这是不尊重人的,就像某人穿着泥泞的鞋子走进
    的头像 发表于 05-11 08:49 1019次阅读

    FPGA入门必备:Testbench仿真文件编写实例详解

    编写完HDL代码后,往往需要通过仿真软件Modelsim或者Vivadao自带的仿真功能对HDL代码功能进行验证,此时我们需要编写Testbench文件对HDL功能进行测试验证。
    发表于 04-29 10:43 1822次阅读

    降低RF电路寄生信号的八个设计规则

    RF产品电路布局要想降低寄生信号,需要RF工程师发挥创造性。记住以下这八条规则,不但有助于加速产品上市进程,而且还可提高工作日程的可预见性。规则1:接地通孔应位于接地参考层开关处流经所
    的头像 发表于 04-24 08:05 970次阅读
    降低RF电路寄生信号的八个设计<b class='flag-5'>规则</b>

    如何优化 PCB 布线规则

    而言,限制或是规则非常重要;一如我们从小就要学会遵守社会与法律规则。同理,为PCB制定规则应当受到重视。虽然为此需要花费时间进行研究并投入精力,但设置这些限制条件
    的头像 发表于 02-19 13:00 1167次阅读
    如何优化 PCB 布线<b class='flag-5'>规则</b>?

    HarmonyOS跨进程通信—IPC与RPC通信开发

    使用Binder驱动,用于设备内的跨进程通信,后者使用软总线驱动,用于跨设备跨进程通信。需要进程通信的原因是因为每个进程都有自己独立的资源
    的头像 发表于 02-02 17:47 1224次阅读
    HarmonyOS跨<b class='flag-5'>进程</b>通信—IPC与RPC通信开发

    pcb设计布局布线原则及规则

    的不良影响。在进行PCB布线设计时,需要遵循一定的规则和原则,下面我们将会介绍PCB设计中的六大布线规则。 PCB设计六大布线规则 一:按照
    的头像 发表于 01-22 09:23 2053次阅读

    pcb走线的规则设置方法介绍

    线规则的设置方法,以确保设计的可靠性和性能。 一、规则的制定前提 在制定PCB走线规则之前,有几个前提需要清楚。 设备要求:首先,根据实际设备要求考虑PCB的尺寸、限制
    的头像 发表于 01-09 10:45 2438次阅读

    AD差分信号走线有哪些规则遵循

    AD差分信号走线有哪些规则遵循? AD差分信号走线是在电子系统设计中非常重要的一部分,它涉及信号传输的稳定性、抗干扰性、匹配性等方面。下面我将详细介绍AD差分信号走线的规则,以帮助您更好地理
    的头像 发表于 12-29 13:54 2065次阅读

    linux查看weblogic进程

    在Linux操作系统中,WebLogic是一种常用的Java应用服务器,用于部署和管理企业级Java应用程序。为了确保WebLogic服务器正常运行,有时我们需要查看WebLogic进程以了解其状态
    的头像 发表于 12-05 16:07 1813次阅读

    如何查看系统是否有僵尸进程

    进程中的指令已经执行完成,但是进程PCB结构还没有回收。   即子进程先于父进程退出后,子进程的PCB
    的头像 发表于 11-29 15:52 6919次阅读
    如何查看系统是否有僵尸<b class='flag-5'>进程</b>