调用abort函数程序一定会终止吗?abort和exit退出程序有什么不同?

若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!




abort和exit退出程序有什么不同?


从实现来看,abort只是简单的发送SIGABRT信号,操作系统内核收到此信号,会尽快终止进程,注意,内核是不知道进程用户态有什么资源要释放的(尽管它可以查到),只会终止进程,这可能造成一些资源未清理或者正确释放,这是未定义的行为。例如输出缓冲区、打开的文件流或者临时文件等等。exit函数的调用将保证相应资源都正确清理,除非内核出现故障,否则资源一定正确释放。


各式各样的退出函数_Exit/_exit和exit有什么区别?


首先,要明确它们所属的标准,_Exit和exit属于C标准,_Exit首次出现在C99,_exit是POSIX标准,并不是C标准。_Exit可以当做是exit的简化版,它不保证执行清理,事实上,所有的实现都不做任何清理,它的出现其实是对POSIX _exit函数加入到C标准。


调用abort函数,程序一定会终止吗?


不一定,abort函数内部会产生SIGABRT信号,如果程序有处理此信号,但不返回,那么程序就不会终止,因为这样会导致abort函数无法执行后面的终止代码。


exit(n)并不完全等价main函数return (n)?


如果main函数里面有atexit注册的函数或者设定了一些需要清理的API,比如setvbuf. 这种情况下,exit (n)是最好的做法,直接return (n)可能导致资源未释放。









微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是 程序员小迷 (致力于C、C++、C#、Android、iOS、Java、Kotlin、Objective-C、Swift、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

若文章对您有帮助,欢迎关注 程序员小迷 。助您在编程路上越走越好!

原文链接:,转发请注明来源!