Shell 用于在 linux 中关闭应用程序的脚本
Shell script to stop an application at power down in linux
我在爱迪生设备中用c写了一个姿势感应代码。我已成功在启动时调用应用程序。但是我需要一个 shell 脚本来在断电时关闭这个应用程序。
我试过kill {pid}
命令行操作。尽管我终止了命令,但在断电期间设备需要额外 5 分钟才能停止该应用程序。我在这里错过了什么吗..
您的应用程序应该显式在关闭时处理一些signal(7)-s, in particular SIGTERM
which is sent (by some system program doing a kill(2))。
发送 SIGKILL
(例如 kill -9
或 kill -KILL
)是不安全的(特别是对于在磁盘上维护某些状态的服务器,例如数据库服务器,以及任何具有某种类型的软件)持久状态、配置或日志...)因为被杀死的程序没有机会清理它的混乱、刷新它的缓冲区并在磁盘上保存一致的状态。
所以稳健的策略是kill -TERM
,然后几秒后kill -QUIT
和几秒后kill -KILL
。因此,健壮的应用程序应该处理 SIGTERM
和 SIGQUIT
(但不能捕获 SIGKILL
)...
您可能会处理 SIGPWR
(但并非每个系统都有或管理得当;一些 UPS 硬件和软件可以)。
也许您的系统使用 systemd and you could take advantage of that (e.g. D-bus 东西)。
我在爱迪生设备中用c写了一个姿势感应代码。我已成功在启动时调用应用程序。但是我需要一个 shell 脚本来在断电时关闭这个应用程序。
我试过kill {pid}
命令行操作。尽管我终止了命令,但在断电期间设备需要额外 5 分钟才能停止该应用程序。我在这里错过了什么吗..
您的应用程序应该显式在关闭时处理一些signal(7)-s, in particular SIGTERM
which is sent (by some system program doing a kill(2))。
发送 SIGKILL
(例如 kill -9
或 kill -KILL
)是不安全的(特别是对于在磁盘上维护某些状态的服务器,例如数据库服务器,以及任何具有某种类型的软件)持久状态、配置或日志...)因为被杀死的程序没有机会清理它的混乱、刷新它的缓冲区并在磁盘上保存一致的状态。
所以稳健的策略是kill -TERM
,然后几秒后kill -QUIT
和几秒后kill -KILL
。因此,健壮的应用程序应该处理 SIGTERM
和 SIGQUIT
(但不能捕获 SIGKILL
)...
您可能会处理 SIGPWR
(但并非每个系统都有或管理得当;一些 UPS 硬件和软件可以)。
也许您的系统使用 systemd and you could take advantage of that (e.g. D-bus 东西)。