linux - 应用程序可能以何种方式死亡?

标签 linux signals

我开发了与一些复杂硬件一起工作的 linux 守护进程,我需要知道应用程序如何退出(正常或异常)以创建适当的清理功能。正如我从文档中读到的那样,应用程序可能会死于:
1.接收信号-sigwait,sigaction
2. 退出
3.杀死
4. tkill

是否还有其他一些方式可以让应用程序退出或终止?

最佳答案

在您的评论中,您写道您担心应用程序可能会以“异常方式”终止。

只有一种解决方案1 -- 应用程序外部的代码。特别是,应用程序在终止时(正常或异常)持有的所有句柄都被内核彻底关闭。

如果您有用于特殊硬件的驱动程序,请在驱动程序收到设备 fd 已关闭的通知时进行清理。如果您还没有自定义驱动程序,则可以使用第二个用户模式进程作为看门狗。只需通过管道将看门狗连接到主进程...当主应用程序关闭时它会收到一个信号。


除了程序员可以在一定程度上控制的事情之外,例如导致段错误的野指针错误,总是有 oom-killer,它甚至可以消除没有错误的进程。出于这个原因,应用程序还应该检测到其看门狗的意外丢失并生成一个新的看门狗。

关于linux - 应用程序可能以何种方式死亡?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25702044/

相关文章:

linux - Bash 脚本在设定的时间后自动终止进程,还处理用户中断

子shell进程双向重定向到父进程

c++ - 调试时 Kubuntu 中的繁忙进程

c++ - Linux C++ 运行并与新进程通信

linux - 解析csv文件并通过特定公式计算相同的数据

python - 在 Python 中注册信号处理程序的正确方法是什么?

swift - 在 Linux 上使用 Swift 生成随机数时出错?

python - 为什么我不能跳出这个 itertools 无限循环?

c++ - Qt : which class should connect() signals and slots - inside or outside the view class?

audio - fscanf(文件指针, "%d\n%lg\n",sig_length,sample_rate);怎么解释呢?