3

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

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

4

1 回答 1

3

您的应用程序应该明确处理一些信号(7) -s,特别是在关机时SIGTERM发送(由某些系统程序执行kill(2) )。

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

所以稳健的策略是kill -TERM,然后几秒后kill -QUIT,几秒后kill -KILL。因此,强大的应用程序应该处理SIGTERM并且SIGQUIT(但SIGKILL不能被捕获)......您可能会处理SIGPWR(但不是每个系统都有它或正确管理它;一些UPS硬件和软件可以)。

也许您的系统使用systemd并且您可以利用它(例如D-bus 的东西)。

于 2015-09-14T09:00:40.007 回答