我用c写了一个Linux守护进程,现在我的问题是如果用户杀死守护进程,守护进程必须自动重启,我怎样才能在守护进程中实现它。
喜欢 :: on shutdown event 收到 > 重新启动守护进程
示例场景
守护进程是长寿的。通常,在系统启动时会创建一个守护进程并一直运行到系统关闭,例如:一个名为 XXX 的守护进程,它执行重要的例程,例如监视特定日志文件的功能,如果发现,请在高安全性应用程序中提醒管理员, 如果这个守护进程被杀死,它需要自动重启
我用c写了一个Linux守护进程,现在我的问题是如果用户杀死守护进程,守护进程必须自动重启,我怎样才能在守护进程中实现它。
喜欢 :: on shutdown event 收到 > 重新启动守护进程
示例场景
守护进程是长寿的。通常,在系统启动时会创建一个守护进程并一直运行到系统关闭,例如:一个名为 XXX 的守护进程,它执行重要的例程,例如监视特定日志文件的功能,如果发现,请在高安全性应用程序中提醒管理员, 如果这个守护进程被杀死,它需要自动重启
如果用户使用kill
pid 来关闭守护程序,则您无法从守护程序内部执行太多操作来重新启动它。(因为大多数用户会在某个地方阅读您需要始终使用kill -9
的内容,这在几乎所有情况下都是一个非常糟糕的主意,但他们仍然会这样做)
如果您可以保证您的用户没有使用kill -9
(而且您不能),那么您可以设置一个信号处理程序来干净地退出并重新启动守护程序。
否则,最好的办法是让另一个进程在守护进程死亡或被杀死时重新启动它。查看daemontools或仅使用简单的 shell 脚本:
while true; do
daemon
sleep 1
done
这是一个错误的问题。重启看门狗(这是你要问的)是一种容错技术。您不会使用容错来纠正人机操作员的故意和故意决定。如果您不希望用户杀死您的进程,请告诉他们不要这样做。如果他们忽略它,那么他们已经破坏了他们的系统。标准系统守护进程通常不会重生,为什么要重生?
我在想 cron 是否可以成为验证守护进程活动的好/安全的主意。
例如:
每 30 分钟启动一个脚本以测试守护程序是否处于活动状态。
$ */30 * * * * <script to verify daemon activity>
脚本(伪代码):
if daemon is active
then
:
else
restart daemon
fi