c - 在 Linux 中关闭应用程序的 Shell 脚本

标签 c linux shell kill intel-edison

我用c语言在edison device中写了一个姿势感应代码。我已成功在启动时调用应用程序。但是我需要一个 shell 脚本来在断电时关闭这个应用程序。

我试过 kill {pid} 命令行操作。尽管我终止了命令,但在断电期间设备需要额外 5 分钟才能停止该应用程序。我在这里遗漏了什么吗..

最佳答案

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

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

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

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

关于c - 在 Linux 中关闭应用程序的 Shell 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32560696/

相关文章:

C - 将 char 或 int 转换为二进制字符串并附加到 char 数组

python-3.x - 有没有办法用 Python 读取 Linux 桌面通知?

shell - 如何使用端口号删除Docker容器

linux - 如何从 unix csh/tcsh shell 执行基本算术

shell - 无法使用docker run将命令行参数传递给Shell脚本文件

C 在 void 函数之后由指针发送的数组的值被修改

c - 在 C 中是否允许/安全地在具有不同大小的结构之间进行转换?

c++ - 在 UNIX 中使用 _exit 时,未清理的资源会发生什么情况?

mysql - centos无法启动mysql,因为找不到mysql.sock

linux - Git 推送访问从内部/等被拒绝