Linux 应用程序可能会以什么方式消亡?

Linux 应用程序可能会以什么方式消亡?,linux,signals,Linux,Signals,我开发的linux守护进程使用一些复杂的硬件,我需要知道应用程序如何退出(正常或异常)以创建适当的清理功能。正如我从文档中读到的,应用程序可能会通过: 1.接收信号-sigwait,sigaction等 2. 退出 3. 杀死 4. tkill 应用程序还有其他退出或消亡的方式吗?当系统或用户不需要时,应用程序应该自行完成 使用像kill-9进程这样的外部突击队可能会给你的应用程序带来一些bug,因为你不知道你的应用程序当时在做什么 尝试在你的应用程序a子系统上执行IMEMENT以控制你的应用程

我开发的linux守护进程使用一些复杂的硬件,我需要知道应用程序如何退出(正常或异常)以创建适当的清理功能。正如我从文档中读到的,应用程序可能会通过:
1.接收信号-
sigwait
sigaction

2. <代码>退出
3. <代码>杀死
4. <代码>tkill


应用程序还有其他退出或消亡的方式吗?

当系统或用户不需要时,应用程序应该自行完成

使用像kill-9进程这样的外部突击队可能会给你的应用程序带来一些bug,因为你不知道你的应用程序当时在做什么

尝试在你的应用程序a子系统上执行IMEMENT以控制你的应用程序状态。。。就像一个真正的守护进程,允许这样的事情:

yourapp service status  or  /etc/init.d/yourapp status
yourapp service start  or  /etc/init.d/yourapp start
yourapp service stop  or  /etc/init.d/yourapp stop
这样,你的应用程序每次都可以正常完成,用户可以轻松控制它


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

只有一种解决方案1——应用程序之外的代码。特别是,应用程序在终止时(正常或异常)持有的所有句柄都由内核干净地关闭

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



除了程序员有一定程度的控制之外,比如导致分段错误的野生指针错误,还有oom杀手,它甚至可以清除一个无错误的进程。因此,应用程序还应该检测其看门狗的意外丢失,并生成一个新的看门狗。

\u exit()
。当然还有
abort()
exec()
函数。我在/etc/init.d中有一个脚本包装器,它完全执行通过启动-停止守护程序编写的内容,但我需要知道应用程序可能会死时的一些异常方式。