2011-04-15 74 views
1

保證在atexit註冊的函數總是會在正常程序終止時被調用嗎? (我在FreeBSD遇到一個場景,即使程序正常終止,我用atexit註冊的函數也不會被調用。用atexit()註冊的函數沒有被調用

+5

調用'_exit(2)'而不是'exit(3)'的應用程序將繞過退出處理程序,它可能會像程序外部的正常終止一樣。 – sarnold 2011-04-15 09:07:30

回答

2

否。首先,如果atexit返回非0值,則不會調用該函數。其次,如果在它之前註冊的函數沒有正常返回,它將不會被調用。

+0

註冊函數按註冊的相反順序調用。詹姆斯,你可能是指「如果一個函數註冊後沒有正常返回」。 – 2011-04-15 09:52:11

+0

@ Bill Evans是的。我正在考慮函數被調用的順序。 – 2011-04-15 11:49:41

1

你稱之爲「正常終止」是什麼?

Unix和C99具有函數_Exit(POSIX和C99)和_exit(僅POSIX),它們允許以任何你想要的狀態終止一個程序,而無需運行atexit處理程序。我知道其他情況下,他們沒有完全運行的情況下,就會陷入「異常終止」時段。