当前位置: 首页 > 面试题库 >

如何检测Linux关闭/重新启动

端木元青
2023-03-14
问题内容

我正在尝试在我的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)示例解决我的问题。如果您使用linux命令运行级别,它将不会有用。感谢您的出色解决方案。


问题答案:

赶上SIGTERM。在处理程序中,读取/var/run/utmp文件以获取运行级别。请参阅命令的源代码以runlevel(8)供参考。



 类似资料:
  • 问题内容: 我正在研究需要检测系统关闭的应用程序。但是,我没有找到任何可靠的方式来接收此事件的通知。 我知道在关机时,我的应用会收到一个信号,然后是。我想知道是否有任何方法可以查询a 是否 为关机序列的一部分 ? 有谁知道是否有一种以编程方式查询(C API)的方法吗? 据我所知,系统没有提供任何其他方法来查询即将发生的关机。如果确实如此,那也将解决我的问题。我也一直在尝试,但是更改似乎是瞬时的,

  • 本文向大家介绍详解linux中nginx启动 重启 关闭命令,包括了详解linux中nginx启动 重启 关闭命令的使用技巧和注意事项,需要的朋友参考一下 启动操作 -c参数指定了要加载的nginx配置文件路径 停止操作 停止操作是通过向nginx进程发送信号来进行的 步骤1:查询nginx主进程号 在进程列表里 面找master进程,它的编号就是主进程号了。   步骤2:发送信号 从容停止Ngi

  • 问题内容: 我写了一个简单的守护程序。当我运行任何程序时,该守护程序都应响应。这个怎么做?在大守护程序循环中: 当我运行新程序(创建新进程)时,在Linux中要调用什么函数? 问题答案: 我不知道是否存在更好的方法,但是您可以定期扫描文件系统。 例如,是到流程可执行文件的符号链接。 在我的系统(Ubuntu / RedHat)上,包含正在运行的进程数(正斜杠后的数字)以及最近启动的进程的pid。如

  • 检测Android应用的启动与关闭 原文链接 : Determine when App is Opened or Closed 原文作者 : Bill Donahue 译文出自 : 开发技术前线 www.devtf.cn 译者 : xianjiajun 校对者: Mr.Simple 校对者: chaossss 状态 : 完成 问题 当开发安卓程序的时候,我们不免需要去检测应用什么时候在前台运行,用

  • linux中如何关闭nf_conntrack,并且不会被iptables自动拉起。之前试过网上的帖子,关闭后启动iptables,nf_conntrack又被自动拉起 能帮忙看看以下处理步骤的命令正确吗? 关闭内核中的nf_conntrace操作 关闭所有防火墙策略 关闭SELinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/seli

  • 我用一个JDesktopPane和几个JButton做了一个简单的用户界面。该程序的工作原理是,当单击按钮时,JInternalFrame将加载并禁用该按钮,以防止创建内部框架的副本。JInternalFrame上的取消按钮关闭帧,JButton再次启用。我的代码如下: adminAddUser类上Cancel按钮的操作侦听器。dispose()方法用于关闭JInternalFrame。 最后,我