【问题标题】:Daemon clean up itself when get killed守护进程被杀死时会自行清理
【发布时间】:2021-12-31 01:56:38
【问题描述】:

我正在尝试按照示例创建一个守护程序应用程序:

Creating a daemon in Linux

在示例中,没有关于守护进程停止的操作。

因此,我很好奇:

  1. 如何向守护进程发送stop 信号?还是直接kill PID
  2. 如果守护进程只能在被杀时停止,守护进程本身是否应该在被杀时执行清理操作?就像关闭文件描述符、保存参数等一样。

提前致谢。

【问题讨论】:

  • 现在,在 systemd 世界中,我认为当您收到 SIGTERM 信号(实际上可以由 kill 发送)时,您才开始正常关机。这些信息也可能有用:freedesktop.org/software/systemd/man/…
  • 守护程序通常在 /var/run 或 /run 中创建一个所谓的 pid 文件,通常命名为“.pid”,其中存储了它们的 pid。这可用于从守护进程的名称中检索守护进程的 pid 并发送 SIGTERM 信号以使其正常完成。

标签: c linux daemon


【解决方案1】:

守护进程本身应该对被杀的进行清理操作吗?就像关闭文件描述符、保存参数等一样。

关闭文件描述符是没有意义的——它们会在进程退出时被内核自动关闭。

对于“保存参数”,这取决于“参数”的含义。如果你的意思是命令行参数,那么不:当守护程序重新启动时,它将获得这些的新副本。

【讨论】:

  • 非常感谢。除了这些,如果守护进程中没有清理操作,是否还有其他潜在风险需要注意?
  • @whisper 您可能需要担心很多事情,这取决于您的守护进程到底在做什么。例如,SysV 共享内存不会被清理(这也是您应该避免使用它的原因)。在不了解您的守护进程的情况下,很难猜测您可能需要清理什么(如果有的话)。
  • 谢谢,够了,我刚开始测试守护进程,并不清楚什么样的资源可能是令牌。随着程序开发的进行,我会牢记这一点。
猜你喜欢
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-30
相关资源
最近更新 更多