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