exit、_exit、abort、return的区别

转自:http://www.cnblogs.com/fixer/archive/2013/05/14/3078660.html

_exit():

跟exit功能大致相同,区别在于_exit不会清空所有缓冲区,关闭所有I/O通道

exit():

在调用时,会做大部分清理工作,但是决不会销毁局部对象,因为没有stack unwinding。会进行的清理工作包括:销毁所有static和global对象,清空所有缓冲区,关闭所有I/O通道。终止前会调用经由 atexit()登录的函数,atexit如果抛出异常,则调用terminate()。

abort():

调用时,不进行任何清理工作。直接终止程序。

retrun:

调用时,进行stack unwinding,调用局部对象析构函数,清理局部对象。如果在main中,则之后再交由系统调用exit()。

需要注意的是,如果main函数没有写以上的任何调用,则隐式调用return。

测试代码如下:

 1 #include<iostream>
 2 #include<stdlib.h>
 3
 4 using std::cout;
 5 using std::endl;
 6
 7 class A
 8 {
 9 public:
10     A(){}
11     ~A(){cout << "A delete" << endl;}
12 };
13
14 class B
15 {
16 public:
17     B(){}
18     ~B(){cout << "B delete" << endl;}
19 };
20
21 int main(int argc, char** argv)
22 {
23     static B testB;
24     A testA;
25     cout << "test code"; //<< endl;//注意此处加不加endl在_exit下的区别
26     _exit(0);
27     //exit(0);
28     //abort();
29     //return 0;
30 }
31
32  

时间: 2024-09-29 23:50:05

exit、_exit、abort、return的区别的相关文章

PHP中exit,exit(0),exit(1),exit(&#39;0&#39;),exit(&#39;1&#39;),die,return的区别

die('1')  die()和exit()都是中止脚本执行函数:其实exit和die这两个名字指向的是同一个函数,die()是exit()函数的别名.该函数只接受一个参数,可以是一个程序返回的数值或是一个字符串,也可以不输入参数,结果没有返回值. 参考:虽然两者相同,但通常使用中也有细微的选择性. 当传递给exit和die函数的值为0时,意味着提前终止脚本的执行,通常用exit()这个名字. echo "1111"; exit(0); echo "2222"; 当

System.exit(-1)和return 的区别

对于只有一个单一方法的类或者系统来说是一样的,但是对于含有多个类和方法,且调用关系比较复杂时就不一样了. System.exit(-1)是指所有程序(方法,类等)停止,系统停止运行. return只是这一个方法停止,并不影响其他方法的顺序运行.比如: void a(){ b(); c(); d(); }其中b()中是return.c()是System.exit(-1);那么 b()会执行,c()会执行,而d()不会被执行. System.exit(int status) public stati

linux之Deamon进程创建及其进程exit,_exit,return之间的区别

Dameon进程又被称做守护进程,一般来说他有以下2个特点: 1.生命周期非常长,一旦启动,一般不会终止,直到系统推出,不过dameon进程可以通过stop或者发送信号将其杀死 2.在后台执行,不跟任何控制终端关联,终端信号比如:SIGINT,SIGQUIT,SIGTSTP,以及关闭终端都不会影响deamon 如何编写Daemon进程,需要遵循以下规则: (1)执行fork()函数,父进程退出,子进程继续 执行这一步,原因有二: ·父进程有可能是进程组的组长(在命令行启动的情况下),从而不能够执

return, exit, _exit的区别

return是返回的最常用的方式 _exit属于POSIX定义的系统调用 exit是GLIBC封装之后的函数 1 _exit和exit都会导致整个进程退出,清理进程所占用的资源,但是glibc封装exit函数的时候加了一些功能:比如提供了在结束程序时回调的接口(atexit), flush 缓冲区(系统调用是没法做这个的 ,因为像printf, scanf之类的缓冲区都属于应用层缓冲区,内核清理资源自然无法顾及) 2return 会清理函数栈,另外两个就不会了,如果是最后一个线程return,也

exit()和return的区别

exit()和return的区别: 按照ANSI C,在最初调用的main()中使用return和exit()的效果相同. 但要注意这里所说的是“最初调用”.如果main()在一个递归程序中,exit()仍然会终止程序:但return将 控制权移交给递归的前一级,直到最初的那一级,此时return才会终止程序.return和exit()的另一个区别 在于,即使在除main()之外的函数中调用exit(),它也将终止程序. _exit()与exit的区别: 头文件: exit:#include<s

Linux编程中的坑——C++中exit和return的区别

今天遇到一个坑,折腾了一天才把这个坑填上,情况是这样的: 写了段代码,在main()函数中创建一个分离线程,结果这个线程什么都没干就直接挂掉了,代码长这样: [cpp] view plain copy int main() { 创建一个分离线程(): return 0: } 后来百度)了一下,原来在main()函数中写return,会被编译器优化成,也会像exit一样直接杀死所有进程,所以分离出来的线程什么都没干,就随着进程一起挂掉了. 所以多线程编程中,main()函数想退出线程应当使用 [c

Linux进程退出--exit与return的区别

通过fork()函数来创建一个进程,那么如何终止一个进程呢? 进程的退出分为正常退出和异常退出: 正常退出: 1).在main()函数执行return. 2).调用exit()函数 3).调用_exit()函数 异常退出可能调用某种函数也可能收到某种信号. 现在只讨论正常退出: (1)exit和return 的区别: a.exit是一个函数,有参数.exit执行完后把控制权交给系统 b.return是函数执行完后的返回.renturn执行完后把控制权交给调用函数. exit()和_exit()

return exit _exit

(1)进程终止: C程序的终止分为两种:正常终止和异常终止. 正常终止分为: return, exit, _exit, _Exit, pthreade_exit. 异常中指分为: abort, SIGNAL,线程响应取消. (2)atexit终止处理程序: ISO C规定,一个进程最多可登记32个终止处理函数,这些函数由exit按登记相反的顺序自动调用.如果同一函数登记多次,也会被调用多次. (3)exit 与 _exit主要区别: main函数结束时也会隐式地调用exit函数,exit函数运行

Linux C _exit函数与exit函数的联系与区别

一.联系 1.功能上,_exit和exit函数都是让进程正常退出,即关闭进程所打开的文件描述符,释放已占用内存和其他资源. 二.区别 1._exit函数在头文件unistd.h中声明,而exit在头文件stdlib.h中声明. 2.执行_exit函数后,控制权立即返回给内核,而exit函数要先执行一些清除操作,然后才将控制权交给内核. 3._exit函数不会刷新I/O缓冲区,可能造成数据丢失,而exit函数是在_exit函数之上的一个封装,它在调用_exit函数之前,会先刷新I/O缓冲区,保证了