代码之家  ›  专栏  ›  技术社区  ›  runner

在linux中关闭电源时停止应用程序的Shell脚本

  •  3
  • runner  · 技术社区  · 10 年前

    我用c语言在爱迪生设备中编写了一个姿势感知代码。我已经成功地在通电时调用了应用程序。但我需要一个shell脚本来在断电时关闭这个应用程序。

    我试过了 kill {pid} 命令行操作。即使我终止了该命令,在断电期间,设备仍需要额外的5分钟来停止该应用程序。我是不是错过了什么。。

    1 回复  |  直到 8 年前
        1
  •  3
  •   Basile Starynkevitch    10 年前

    您的应用程序应该 明确地 处理一些 signal(7) -s、 特别是 SIGTERM 这是由一些系统程序发送的 kill(2) )关闭时。

    发送 SIGKILL (例如。 kill -9 kill -KILL )是不安全的(特别是对于在磁盘上维护某些状态的服务器,例如数据库服务器,但任何具有某种持久状态、配置或日志的软件…),因为被终止的程序没有机会清理其混乱、刷新其缓冲区并在磁盘上保存一致状态。

    因此,稳健的政策是 kill -TERM ,然后几秒钟后 kill -QUIT 几秒钟后 kill-kill 。因此,健壮的应用程序应该处理 西格术语 SIGQUIT (但是 西格基尔 无法捕获)。。。 你可以处理 SIGPWR (但并非每个系统都有或管理得当 UPS 硬件&软件做)。

    也许您的系统使用 systemd 你可以利用这一点(例如。 D-bus 事情)。