exit、_EXIT和_exit三个函数都是终止一个进程,但是三者却有一些差异。网上对于它们的介绍也是特别的多,这里我就不重复造轮子了,只是从我的角度和观点去归纳性的描述一些这三者的异同。

  1. exit和_EXIT都是标准C提供的库函数,定义在<stdlib.h>中;而_exit并不是标准C的库函数,它是Posix扩展定义的。
  2. 在类UNIX系统中,一般_exit是系统调用,而exit和_EXIT都是库函数。而且_exit和_EXIT功能一般是一样的。exit最终也会调用_exit。
  3. exit和_EXIT/_exit的区别在于调用exit退出程序的时候,程序不会直接退出,而是会做一些操作:(1)调用有atexit含住注册的终止处理程序(如果有的话)(2)关闭所有标准I/O流等。而后两者一般都会直接退出程序,不会去做上面的两个操作(是否关闭I/O流取决于实现)。
  4. 程序里面调用return返回相当于调用了exit。

在很多场景中,我们使用那一个函数退出程序没有太大区别。但是有些特殊场景,我们可能就得注意选择合适的函数。如果我们希望程序退出前可以执行终止处理程序,那肯定是需要调用exit或者return。但如果我们希望程序直接退出,不要再做任何多余的操作。这在错误处理程序里面比较常见,一般错误处理程序是整个程序的最后一道防线,不能再引发新的错误,我们希望程序可以立即退出。这种情况下,一般使用_exit和_EXIT.

有了这些概念我觉得我们基本上就知道如何去使用这几个函数了,如果你对细节感兴趣的话,可以去看一下man文档(man 3 _exit 或者man 3p _exit ,后者需要你装了POSIX的man文档),里面有更加详细的说明,或者去看一下具体的代码实现。