栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Linux守护进程

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Linux守护进程

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

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

1.
fork(),以便父级可以退出,这会将控制权返回给命令行或shell来调用您的程序。需要执行此步骤,以确保新流程不会成为流程组负责人。如果您是流程组负责人,则下一步,setsid()将失败。
2.
setsid()成为进程组和会话组组长。由于控制终端与会话相关联,并且此新会话尚未获得控制终端,因此我们的进程现在没有控制终端,这对于守护程序而言是一件好事。
3. 再次fork(),以便父级(会话组负责人)可以退出。这意味着,作为非会议小组的负责人,我们永远无法重新获得控制终端。
4. chdir(“
/”),以确保我们的进程不使用任何目录。如果不这样做,可能会导致管理员无法卸载文件系统,因为它是我们的当前目录。[等效地,我们可以切换到包含对守护程序的操作很重要的文件的任何目录。
5. umask(0),这样我们就可以完全控制所写内容的权限。我们不知道我们可能继承了什么umask。[此步骤是可选的]
6. close()fds
0、1和2。这将释放我们从父进程继承的标准输入,输出和错误。我们无法知道这些fds可能被重定向到了哪里。请注意,许多守护程序使用sysconf()确定限制_SC_OPEN_MAX。_SC_OPEN_MAX告诉您最大打开文件数/进程数。然后,在一个循环中,守护程序可以关闭所有可能的文件描述符。您必须决定是否需要执行此操作。如果您认为可能打开了文件描述符,则应该关闭它们,因为并发文件描述符的数量受到限制。
7.
为stdin,stdout和stderr建立新的打开描述符。即使您不打算使用它们,将它们打开也是一个好主意。精确地处理这些只是一个问题。例如,如果您有一个日志文件,则可能希望以stdout或stderr的形式打开它,并以stdin的形式打开“
/ dev / null”;或者,您可以以stderr和/或stdout的身份打开“ / dev /
console”,以stdin或其他对您的特定守护程序有意义的组合形式打开“ / dev / null”。



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



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/403041.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号