用atexit()注册的函数没有被调用

Function registered with atexit() not getting called

本文关键字:调用 函数 atexit 注册      更新时间:2023-10-16

是否保证在正常程序终止时总是调用atexit注册的函数?(我在FreeBSD中遇到过这样一种情况,我用atexit注册的函数永远不会被调用,即使程序正常终止)。

No。首先,如果atexit返回非0值,则不会调用该函数。其次,如果在它之前注册的函数没有正常返回,它将不会被调用。

什么叫"正常终止"?

Unix和C99都有_Exit函数(POSIX和C99都有)和_Exit函数(只有POSIX),它们允许在不运行atexit处理程序的情况下以任何状态终止程序。在我所知道的其他情况下,它们没有运行,显然都失败到"异常终止"桶中。