Linux 守护进程

2024-10-17 08:47:00
admin
原创
240
摘要:问题描述:我正在编写一个 Linux 守护进程。我发现了两种方法来实现它。fork()通过调用和设置来守护您的进程sid。使用 运行你的程序&。哪种方法才是正确的?解决方案 1:摘自http://www.steve.org.uk/Reference/Unix/faq_2.html#SEC16以...

问题描述:

我正在编写一个 Linux 守护进程。我发现了两种方法来实现它。

  1. fork()通过调用和设置来守护您的进程sid

  2. 使用 运行你的程序&

哪种方法才是正确的?


解决方案 1:

摘自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 打开,并将“/dev/null”作为 stdin 打开;或者,您可以将“/dev/console”作为 stderr 和/或 stdout 打开,将“/dev/null”作为 stdin 打开,或者任何其他对您的特定守护进程有意义的组合。

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

解决方案 2:

我建议你根本不要把程序写成守护进程。让它在前台运行,并给它指定文件描述符、当前目录、进程组等。

如果您希望将此程序作为守护进程运行,请使用 start-stop-daemon(8)、init(8)、runsv(来自 runit)、upstart、systemd 或任何其他程序将您的进程作为守护进程启动。也就是说,让您的用户决定如何运行您的程序,而不是强制它必须作为守护进程运行。

解决方案 3:

只需使用daemon(3)(来自unistd.h)。

daemon() 函数适用于希望脱离控制终端并作为系统守护进程在后台运行的程序。...

解决方案 4:

第一种。第二种不是守护进程,而是在后台运行。守护进程应该有自己的会话和进程组,并且应该有控制终端。

解决方案 5:

实际上,要创建守护进程,您必须进行双重分叉。

使用 & 运行该程序会使 shell 在后台运行该程序,但这并不会使它成为守护进程。守护进程以 init (pid 1) 作为父进程,因此需要双 fork。

因此,如果您的程序是守护进程,那么最好的办法就是自己处理这个问题(还有更多方法,请参见此处)。您也可以使用 start-stop-daemon 程序。

解决方案 6:

您使用的是哪种语言?有些语言有辅助方法,可使守护进程更容易。例如,Ruby 有守护进程包。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   2757  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1693  
  在全球化的浪潮下,企业的业务范围不断拓展,跨文化协作变得愈发普遍。不同文化背景的团队成员在合作过程中,由于语言、价值观、工作习惯等方面的差异,往往会面临诸多沟通挑战。而产品生命周期管理(PLM)系统作为企业管理产品全生命周期的重要工具,如何有效支持跨文化协作成为了关键问题。通过合理运用沟通策略,PLM系统能够在跨文化团...
plm是什么软件   15  
  PLM(产品生命周期管理)系统在企业的产品研发、生产与管理过程中扮演着至关重要的角色,其中文档版本控制是确保产品数据准确性、完整性和可追溯性的关键环节。有效的文档版本控制能够避免因版本混乱导致的错误、重复工作以及沟通不畅等问题,提升企业整体的运营效率和产品质量。接下来,我们将深入探讨 PLM 系统实现文档版本控制的 6...
plm是什么意思   19  
  PLM(产品生命周期管理)项目管理旨在通过有效整合流程、数据和人员,优化产品从概念到退役的整个生命周期。在这个过程中,敏捷测试成为确保产品质量、加速交付的关键环节。敏捷测试强调快速反馈、持续改进以及与开发的紧密协作,对传统的测试流程提出了新的挑战与机遇。通过对测试流程的优化,能够更好地适应PLM项目的动态变化,提升产品...
plm管理系统   18  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用