我知道,如果有足够的背景,人们可能希望能够建设性地使用(即恢复)segfault健康)状况。
但是,这样的努力值得吗?如果是,在什么情况下?
你不能真正指望从段错误中恢复。您可以检测到它的发生,并在可能的情况下转储相关的特定于应用程序的状态,但您无法继续该过程。这是因为(除其他外)
- 失败的线程无法继续,因此您唯一的选择是 longjmp 或终止线程。在大多数情况下,两者都不安全。
- 无论哪种方式,您都可能使互斥锁/锁处于锁定状态,这会导致其他线程永远等待
- 即使没有发生,您也可能会泄漏资源
- 即使您不执行上述任何操作,发生段错误的线程在失败时也可能导致应用程序的内部状态不一致。不一致的内部状态可能会导致数据错误或随后出现进一步的不良行为,这会导致比简单退出更多的问题
因此,总的来说,除了以相当突然的方式终止进程之外,捕获它并做任何事情都是没有意义的。尝试将(重要)数据写回光盘或继续执行其他有用的工作是没有意义的。将状态转储到日志(许多应用程序都会这样做)然后退出是有道理的。
可能有用的事情可能是 exec() 你自己的进程,或者有一个看门狗进程,在崩溃的情况下重新启动它。 (注意:如果您的进程有 >1 个线程,则 exec 并不总是具有明确定义的行为)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)