gpt4 book ai didi

c - 如何检测 Linux 关机/重启

转载 作者:IT王子 更新时间:2023-10-29 00:26:14 27 4
gpt4 key购买 nike

我试图在我的 c 程序中检测 Linux 的关闭或重启。我发现程序可以使用 signal(SIGTERM, handler) (SIGKILL, handler)。但是如果用户也使用命令终止进程,这两个也会触发。

在某些解决方案中,他们说可以使用运行级别,但它不起作用。不知道进程是否在系统初始化运行级别之前被终止。我什至尝试将脚本放入 rcx.d,但它仍然无法正常工作。

有人有什么建议吗?我需要在多种 Linux 系统上运行。

谢谢。

[更新]我使用 R 解决方案,但我仍然没有看到我的数据在重新启动或关闭时是清晰的。是我的函数有问题吗??

int start() {
if (initIni() == EXIT_FAILURE)
return EXIT_FAILURE;
struct sigaction act;
memset(&act, '\0', sizeof(act));
act.sa_sigaction = &signal_callback_handler;
act.sa_flags = SA_SIGINFO;
sigaction(SIGTERM, &act, NULL);
....
}

void signal_callback_handler(int signum, siginfo_t *siginfo, void *context) {
if (signum == SIGTERM && (long)siginfo->si_pid == 1) {
clearData();
}
exit(signum);
}

[更新]最后,我使用 David Schwartz runlevel(8) example解决我的问题。如果您使用 linux 命令运行级别,它将没有用。感谢您提供出色的解决方案。

最佳答案

您的假设是错误的。没有办法捕获 SIGKILL;它终止了进程,没有机会回应它。

话虽如此,我可能有一个解决方案:您可以捕获 SIGTERM,并且如果您使用 sigactionSA_SIGINFO 安装信号处理程序> 标志,您应该能够确定哪个进程向您发送了 SIGTERM 信号。如果它来自 init (pid 1),则表示关闭。这有点骇人听闻,但可能适合您的目的。

关于c - 如何检测 Linux 关机/重启,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22009705/

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