我在c。的edison设备上写了一个姿态传感代码。 我已经成功地在启动时调用应用程序。 但是我需要一个shell脚本来closures这个应用程序。
我已经尝试kill {pid}
命令行操作。 即使我杀死了这个命令,在断电的时候需要额外的5分钟来停止这个应用程序。 我在这里错过了什么
你的应用程序应该明确地处理一些信号(7) -s,特别是在关机时发送的SIGTERM
(由一些系统程序执行kill(2) )。
发送一个SIGKILL
(例如kill -9
或kill -KILL
)是不安全的(特别是服务器维护磁盘上的某些状态,例如数据库服务器,还有任何具有某种持久状态,或配置或日志的软件)因为杀死的程序没有机会清理它的混乱,刷新它的缓冲区,并保存在磁盘上一致的状态。
所以强大的政策是kill -TERM
,然后几秒钟后kill -QUIT
,几秒钟后kill -KILL
。 因此,健壮的应用程序应该处理SIGTERM
和SIGQUIT
(但不能捕获SIGKILL
)…您可能会处理SIGPWR
(但不是每个系统都有或正确管理它;有些UPS硬件和软件)。
也许你的系统使用systemd ,你可以利用它(例如D-bus的东西)。