linux 守护进程 失败,Linux守护进程

来自http://www.steve.org.uk/Reference/Unix/faq_2.html#SEC16

以下是成为守护程序的步骤:

fork(),以便父级可以退出,这会将控制权返回给命令行或shell来调用您的程序。需要执行此步骤,以确保新流程不会成为流程组负责人。如果您是流程组负责人,则下一步,setsid()将失败。

setsid()成为进程组和会话组组长。由于控制终端与会话相关联,并且此新会话尚未获得控制终端,因此我们的进程现在没有控制终端,这对于守护程序而言是一件好事。

再次fork(),以便父级(会话组负责人)可以退出。这意味着,作为非会议小组的负责人,我们永远无法重新获得控制终端。

chdir(“ /”),以确保我们的进程不使用任何目录。如果不这样做,可能会导致管理员无法卸载文件系统,因为它是我们的当前目录。[等效地,我们可以切换到包含对守护程序的操作很重要的文件的任何目录。

umask(0),这样我们就可以完全控制所写内容的权限。我们不知道我们可能继承了什么umask。[此步骤是可选的]

close()fds 0、1和2。这将释放我们从父进程继承的标准输入,输出和错误。我们无法知道这些fds可能被重定向到了哪里。请注意,许多守护程序使用sysconf()确定限制_SC_OPEN_MAX。_SC_OPEN_MAX告诉您最大打开文件数/进程数。然后,在一个循环中,守护程序可以关闭所有可能的文件描述符。您必须决定是否需要执行此操作。如果您认为可能打开了文件描述符,则应该关闭它们,因为并发文件描述符的数量受到限制。

为stdin,stdout和stderr建立新的打开描述符。即使您不打算使用它们,将它们打开也是一个好主意。精确地处理这些只是一个问题。例如,如果您有一个日志文件,则可能希望以stdout或stderr的形式打开它,并以stdin的形式打开“ / dev / null”;或者,您可以以stderr和/或stdout的身份打开“ / dev / console”,以stdin或其他对您的特定守护程序有意义的组合形式打开“ / dev / null”。

更好的是,仅调用daemon()函数(如果可用)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值