小编sow*_*ing的帖子

如何检测Linux关机/重启

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

在某些解决方案中,他们说可以使用运行级别,但它不起作用.在系统初始化运行级别之前,不知道进程是否被kill.我甚至尝试将脚本放在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);
}
Run Code Online (Sandbox Code Playgroud)

[更新]最后,我使用David Schwartz runlevel(8)示例来解决我的问题.如果你使用linux命令运行级别,它将没有用.谢谢你的解决方案.

c linux shutdown

7
推荐指数
2
解决办法
9788
查看次数

标签 统计

c ×1

linux ×1

shutdown ×1