代码之家  ›  专栏  ›  技术社区  ›  Lapsio

ungentle exit()是否可以接受处理严重错误的方法?

  •  4
  • Lapsio  · 技术社区  · 6 年前

    在多线程C程序中,由于严重的程序错误,温和的程序退出将很难实现,难以退出使用 exit_group(); 函数可接受的停止程序执行的方法?

    我的意思是,在任何进一步的操作都可能损坏文件系统和数据库之前,都是非常关键和不可恢复的错误。我有点担心潜在的资源泄漏。事实上,即使没有泄漏,也会被锁定——所以如果不重新启动,进程就无法重新启动,因为某些资源将保留。

    所讨论的操作系统是现代Linux(4.x内核)

    1 回复  |  直到 6 年前
        1
  •  3
  •   Florian Weimer    6 年前

    exit 运行注册的清理处理程序 atexit at_quick_exit ,刷新stdio流,并执行大量其他清理。对于真正严重的错误(例如潜在的可利用内存损坏), _exit 会是一个更安全的选择。在早期的glibc版本中, abort (或) assert(false) )也刷新了stdio流。另一种选择是执行未定义的指令。