【问题标题】:Handling the signal generated by system reboot处理系统重启产生的信号
【发布时间】:2014-07-10 00:06:03
【问题描述】:

每当我发出重启命令时,我的进程都会收到 SIGTERM 信号并正在处理它。如果 SIGTERM 将要重新启动,我不想处理它。

请给我建议。

当我执行system("reboot") 时,有什么方法可以向我的进程发送kill -9 信号?

我正在使用 Cent OS (Linux)。

【问题讨论】:

    标签: c linux process


    【解决方案1】:

    每当我发出重启命令时,我的进程都会收到 SIGTERM 信号并正在处理它。如果 SIGTERM 将要重新启动,我不想处理它。

    您可以尝试在您的信号处理程序中运行/sbin/runlevel(好吧,也许在信号处理程序中甚至不可能产生进程)以获取当前运行级别。运行级别 6 正在重新启动。

    当我执行系统(重启)时,有什么方法可以向我的进程发送 kill -9 信号。

    如果您的进程是由 init 脚本启动的,您可以更改脚本,以便使用 kill -KILL 而不是其他内容来执行停止。

    我正在使用 Cent OS(linux)。

    我不知道以下是否适用于 CentOS。

    在 Debian 中,所有剩余的进程(运行完所有终止脚本后仍然存在的进程)由 /etc/init.d/sendsigs 发出信号。如果您有管理员权限,您可以尝试自定义它,以便在没有 TERMing 之前将一个特别命名的进程(您的)杀死。

    不过,/run/sendsigs.omit 中相关的所有 pid 以及 /run/sendsigs.omit.d/ 中文件中相关的所有 pid 都没有收到任何信号。

    【讨论】:

      【解决方案2】:

      如果您的进程正在发出重新启动系统的命令,那么它显然知道重新启动即将到来。预先设置适当的信号处理程序,例如

      signal(SIGTERM, SIG_IGN); // or SIG_DFL to restore default action (terminate process)
      system("reboot");
      

      在系统停止之前,您的进程最终仍会被终止(通过SIGKILL),但这要等到重新启动过程的稍后时间才会发生。

      【讨论】:

      • 如果我在 linux 控制台运行重启,我该如何处理。
      【解决方案3】:

      我为上面的问题找到了解决方案,只想在这里更新。 在 /etc/init.d 中有一个文件“halt”。 此停止仅在运行级别 0 和 6 上执行。 我在向所有进程发送 SIGTERM 之前添加了一行“pkill -9 processname”。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-05-24
        • 2022-11-07
        • 2018-07-09
        • 1970-01-01
        • 1970-01-01
        • 2016-09-02
        • 1970-01-01
        • 2020-02-16
        相关资源
        最近更新 更多