【问题标题】:How do I detect shutdown/reboot from linux app [duplicate]如何从 linux 应用程序检测关机/重启 [重复]
【发布时间】:2013-10-09 10:43:34
【问题描述】:

我有一个用 C 语言编写的应用程序,它作为守护进程运行,需要在系统处于关闭或重新启动状态时通过 RS232 发送一些东西,它需要区分这两者。 所以我的想法是: 在我的脚本“停止”情况下的应用程序脚本 /etc/init.d/my_app 中,我将运行 /sbin/runlevel 命令以获取当前运行级别: 0 - 关机状态 6 - 重启状态 然后我会执行一些命令告诉我的守护进程是什么状态,守护进程会通过rs进行通信,然后退出。

我认为它应该可以工作,但它可能不是最好的解决方案,特别是因为我的应用程序已经作为守护程序运行,也许我可以直接从系统/内核/库或通过 unix 套接字或其他东西接收一些信号。

最好的问候

马雷克

【问题讨论】:

    标签: c linux shutdown reboot


    【解决方案1】:

    我不确定系统关闭时将哪个信号发送到应用程序。我最好的猜测是 SIGTERM,如果应用程序没有关闭 SIGKILL。那么您是否尝试捕获 SIGTERM 并正确关闭您的程序?网上有很多examples 如何做到这一点。

    对于更复杂的进程处理,您可以将 SIGUSR1、SIGUSR2 发送到您的应用程序。

    【讨论】:

    • 是的,我知道 SIGTERM 和 SIGKILL 信号,我也在处理 SIGUSR1 和 SIGUSR2,但这些都不能满足我的需求。 SIGTERM 和 SIGKILL 并不意味着系统正在关闭以重新启动或停止。我可以使用 SIGUSR1 或 SIGUSR2 向我的应用程序发出信号,例如在执行“停止”案例期间从 /etc/init.d/my_script 发出信号。
    • 如果有人需要它:当系统因重新启动或关机而关闭时,init 设置变量 $RUNLEVEL,可以在执行“停止”案例期间在 /etc/init.d/my_script 中读取,并且可以执行适当的操作,例如。通过将 SIGUSR1 发送到正在运行的应用程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多