C 一种可靠的系统检测方法
这是检测守护进程是否从systemd启动的可靠方法吗C 一种可靠的系统检测方法,c,linux,daemon,systemd,C,Linux,Daemon,Systemd,这是检测守护进程是否从systemd启动的可靠方法吗 #include <systemd/sd-daemon.h> #include <unistd.h> bool DetectSystemd(void) { if (sd_booted() > 0 && getppid() == 1) { return true; } return false; } #包括 #包括 布尔检测系统(无效) { 如果
#include <systemd/sd-daemon.h>
#include <unistd.h>
bool DetectSystemd(void)
{
if (sd_booted() > 0 && getppid() == 1) {
return true;
}
return false;
}
#包括
#包括
布尔检测系统(无效)
{
如果(sd_booted()>0&&getppid()==1){
返回true;
}
返回false;
}
对我来说,这听起来像个XY问题。我可以想象你为什么会关心这件事的两个原因:
守护程序(3)
混淆,这是没有用的)
传统的守护进程将采用命令行选项--daemonize(如果默认在前台运行)或--前台(如果默认为daemonize)。传递这些标志之一的责任属于启动程序的人(如果是用户)或编写初始化脚本的人(应该是包装商,而不是上游的您)
现代实践中的趋势已经发生了变化:进程不应该自行处理,而是由守护进程管理器运行,例如启动-停止守护进程(8)(同样,这是打包人员的决定)
现在systemd变得无处不在,一些最佳实践正在发生变化。例如,现在上游可以提供一个.service文件,而不是每个打包程序都必须提供自己的变体,而现在单独实现daemonization步骤完全没有意义
对于第二种情况,如果您想使用systemd的一些服务,只需尝试使用它们,并像往常一样检查错误。对于许多应用程序,您还不想让它成为一个硬错误(如果只是为了开发/测试,可能会有一些方法在没有systemd的情况下运行您的程序——但这可能需要更改一些配置选项,这并不容易),但硬依赖现在变得合法了