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

    文章

    3441

    浏览量

    92438
  • 函数
    +关注

    关注

    3

    文章

    3911

    浏览量

    61313

原文标题:Daemon 进程的创建

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

收藏 人收藏

    评论

    相关推荐

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

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

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

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

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

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

    python变量命名规则

    规则和约定。本文将详尽、详实、细致地探讨Python变量的命名规则,帮助读者了解如何正确命名变量并在编程中遵循最佳实践。 一、变量命名规则的重要性 合适的变量命名对于
    的头像 发表于 11-23 15:44 749次阅读

    如何解决LLMs的规则遵循问题呢?

    传统的计算系统是围绕计算机程序中表达的指令的执行来设计的。相反,语言模型可以遵循用自然语言表达的指令,或者从大量数据中的隐含模式中学习该做什么。
    的头像 发表于 11-15 09:33 296次阅读
    如何解决LLMs的<b class='flag-5'>规则</b><b class='flag-5'>遵循</b>问题呢?

    进程通信的应用场景

    是相互独立的,一般而言是不能相互访问的。但很多情况下进程需要互相通信,来完成系统的某项功能。进程通过与内核及其它进程之间的互相通信来协调它们的行为。
    的头像 发表于 11-11 14:42 355次阅读
    <b class='flag-5'>进程</b>通信的应用场景

    进程间通信的原理

    一.为什么进程需要通信? 1).数据传输 一个进程需要将它的数据发送给另一个进程; 2).资源共享 多个
    的头像 发表于 11-10 17:05 406次阅读
    <b class='flag-5'>进程</b>间通信的原理

    PCB设计规则检查器编写技巧

    由于DRC必须遍历 PCB设计整个电路图,包括每个符号、每个引脚、每个网路、每种属性,如有必要还能创建数目不限“附属”文件。如4.0节所述,DRC可以标示出任何违反PCB设计规则细微偏差。例如
    发表于 10-31 15:06 191次阅读

    硬核分享,使用高速转换器时应遵循哪些重要的PCB布线规则

    硬核分享,使用高速转换器时应遵循哪些重要的PCB布线规则
    的头像 发表于 10-17 16:34 297次阅读

    编写PCB设计规则检查器技巧

    由于DRC必须遍历 PCB设计整个电路图,包括每个符号、每个引脚、每个网路、每种属性,如有必要还能创建数目不限“附属”文件。如4.0节所述,DRC可以标示出任何违反设计规则细微偏差。
    发表于 10-13 14:58 229次阅读

    常见的进程间通信方式

    进程间通信 如果两个进程,想要知道对方在干嘛,或者进行协调运行,就需要进程间通信。下面介绍一下常见的进程间通信方式。 无名管道: 管道是一种
    的头像 发表于 10-08 15:48 831次阅读
    常见的<b class='flag-5'>进程</b>间通信方式

    为什么需要进程 特征和定义有哪些

    为什么需要进程 通常程序不能并发执行,因为程序并发执行的结果,是不可再现的。为了使程序,可以并发执行,且能对其加以描述和控制,引入了进程的概念。 进程的特征和定义
    的头像 发表于 10-08 15:29 374次阅读
    为什么<b class='flag-5'>需要</b><b class='flag-5'>进程</b> 特征和定义有哪些

    Linux中如何编写守护进程程序

    守护进程Daemon)也称为精灵进程,是运行在后台的一种特殊进程,它独立于控制终端并且周期性地执行某种任务或等待处理某些事情的发生,主要表现为以下两个特点: ⚫ 长期运行。守护
    的头像 发表于 10-07 17:12 393次阅读
    Linux中如何<b class='flag-5'>编写</b>守护<b class='flag-5'>进程</b>程序

    什么是ai人工智能

    规则型AI:该类型的计算机程序遵循规则、逻辑和它们的条件,以执行任务。例如,人们可以编写程序来告诉计算机,如果用户按下一个按钮,则显示一个特定的屏幕或执行特定的操作。
    的头像 发表于 08-14 14:19 3126次阅读

    学习PCB设计需要知道的16个原则

    PCB设计就像做人一样,从来不是一件随心所欲的事,从画原理图到布局布线,设计者都需要遵循一定的规则
    发表于 05-04 10:57 332次阅读