gpt4 book ai didi

c - 检测systemd的可靠方法

转载 作者:太空宇宙 更新时间:2023-11-04 11:09:27 25 4
gpt4 key购买 nike

这是检测守护进程是否从 systemd 启动的可靠方法吗?

#include <systemd/sd-daemon.h> 
#include <unistd.h>

bool DetectSystemd(void)
{
if (sd_booted() > 0 && getppid() == 1) {
return true;
}

return false;
}

最佳答案

这对我来说听起来像是一个 XY 问题。我可以想象您可能关心的两个原因:

  1. 您想知道是以前台模式还是后台模式运行您的程序。
  2. 您依赖(可能是可选的)systemd 服务。

将“daemonize”定义为“(双)fork 并退出父进程以重新设置为 init,以及处理其他步骤,例如放弃控制终端,...”(编辑:systemd 维护者有写了一个方便的手册页:daemon(7)(不要与 daemon(3) 混淆,后者没有用)

传统的守护进程会采用命令行选项:--daemonize(如果默认是在前台运行)或--foreground(如果默认是守护进程)。传递其中一个标志的责任属于启动程序的人(如果是用户)或编写初始化脚本的人(应该是打包者,而不是上游的你)。

现代实践的趋势已经改变:进程不应该自己照顾自己,而是由守护进程管理器运行,例如 start-stop-daemon(8)(同样是打包程序的决定)。

现在 systemd 变得无处不在,一些最佳实践正在发生变化。例如,现在上游可以发送一个 .service 文件,而不是每个打包者都必须发送他们自己的变体,现在自行实现守护进程步骤完全没有意义。

对于第二种情况,如果您想使用 systemd 的某些服务 - 只需尝试使用它们,并像往常一样检查错误。对于许多应用程序,您还不想让它成为一个硬错误(如果仅用于开发/测试,可能应该有一些方式在没有 systemd 的情况下运行您的程序 - 但这可能需要更改一些配置选项,它不一定很容易),但硬依赖现在正变得合法。

关于c - 检测systemd的可靠方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23839061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com