ungentle exit() 是处理严重错误的可接受方法吗?
Is ungentle exit() acceptable way to handle critical error?
在多线程 C 程序中,由于严重的程序错误,温和的程序退出真的很难实现,使用 exit_group();
函数硬退出是否可以接受停止程序执行的方式?
我的意思是真正严重且不可恢复的错误,直到任何进一步的操作都可能损坏文件系统和数据库。我有点担心潜在的资源泄漏。事实上,甚至没有泄漏,而是锁定 - 因此如果不重新启动,该进程将无法重新启动,因为某些资源将保留。
OS 有问题的是现代 Linux(4.x 内核)
exit
运行用 atexit
或 at_quick_exit
注册的清理处理程序,刷新 stdio 流,并执行许多其他清理。对于真正严重的错误(例如可能被利用的内存损坏),_exit
将是一个更安全的选择。在较旧的 glibc 版本中,abort
(或 assert(false)
)也会刷新 stdio 流。另一种选择是执行未定义的指令。
在多线程 C 程序中,由于严重的程序错误,温和的程序退出真的很难实现,使用 exit_group();
函数硬退出是否可以接受停止程序执行的方式?
我的意思是真正严重且不可恢复的错误,直到任何进一步的操作都可能损坏文件系统和数据库。我有点担心潜在的资源泄漏。事实上,甚至没有泄漏,而是锁定 - 因此如果不重新启动,该进程将无法重新启动,因为某些资源将保留。
OS 有问题的是现代 Linux(4.x 内核)
exit
运行用 atexit
或 at_quick_exit
注册的清理处理程序,刷新 stdio 流,并执行许多其他清理。对于真正严重的错误(例如可能被利用的内存损坏),_exit
将是一个更安全的选择。在较旧的 glibc 版本中,abort
(或 assert(false)
)也会刷新 stdio 流。另一种选择是执行未定义的指令。