exit()函数与_exit()函数及return关键字的区别:

  exit()和_exit()函数都可以用于结束进程,不过_exit()调用之后会立即进入内核,而exit()函数会先执行一些清理之后才会进入内核,比如调用各种终止处理程序,关闭所有I/O流等,我建议直接在Linux的终端中查看man手册,手册的内容是最官方的,而且不会有错,手册的英文是为全世界的程序员做的,所以手册的英语不会难。

1. 实例代码:

#include <unistd.h>

    void _exit(int status);

    #include <stdlib.h>

    void _Exit(int status);

 DESCRIPTION
    The function _exit() terminates the calling process
    "immediately". Any open file descriptors belonging to
    the process are closed; any children of the process are
    inherited by process 1, init, and the process's parent
    is sent a SIGCHLD signal.

    The value status is returned to the parent process as
    the process's exit status, and can be collected using
    one of the wait() family of calls.

  这是手册对_exit()函数的描述,意思是_exit()函数终止调用的进程,进程所有的文件描述符(在linux中一切皆文件)都被关闭, 这个进程的所有子进程将被init(最初的进程,所有的进程都是来自init进程,所有的进程都由其父进程创建,即init进程是所有进程的祖先!)进程领养,并且这个终止的进程将向它的父进程发送一个sigchld信号。_exit()的参数status被返回给这个终止进程的父进程来作为这个终止进程的退出状态,这个退出状态值能被wait()函数族的调用收集(就是通过wait()函数来获得子进程的退出状态,之后wait()函数将会释放子进程的地址空间,否则会出现zoom进程)。

  _exit()函数是系统调用。会清理内存和包括pcb(内核描述进程的主要数据结构)在内的数据结构,但是不会刷新流,而exit()函数会刷新流。比如exit()函数会将I/O缓冲中的数据写出或读入(printf()就是I/O缓冲,遇到‘\n'才会刷新,若直接调用exit()则会刷新,而_exit()则不会刷新)。

  2.实例代码:

#include <stdlib.h>

    void exit(int status);

DESCRIPTION
    The exit() function causes normal process termination
    and the value of status & 0377 is returned to the parent
    (see wait(2)).

这是man手册中对exit()函数的秒数,exit()函数导致子进程的正常退出,并且参数status&0377这个值将被返回给父进程。exit()应该是库函数。exit()函数其实是对_exit()函数的一种封装(库函数就是对系统调用的一种封装)。

 3.return 不是系统调用,也不是库函数,而是一个关键字,表示调用堆栈的返回(过程活动记录),是函数的退出,而不是进程的退出。

  return函数退出,将函数的信息返回给调用函数使用,与exit()和_exit()函数有本质区别。

4.abort()函数。


 #include <stdlib.h>

    void abort(void);

DESCRIPTION
    The abort() function causes abnormal program termination
    unless the signal SIGABRT is caught and the signal han-
    dler does not return. If the abort() function causes
    program termination, all open streams are closed and
    flushed.

    If the SIGABRT signal is blocked or ignored, the abort()
    function will still override it.

 

  abort()函数用于异常退出。返回一个错误代码。错误代码的缺省值是3。abort()函数导致程序非正常退出除非sigabrt信号被捕捉到,并且信号处理函数没有返回(即abort()函数给自己发送sigabrt信号),如果abort()函数导致程序终止,所有的打开的流将被关闭并且刷新。

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

C++ 中exit(),_exit(),return,abort()函数的区别的更多相关文章

  1. Swift语言和其他计算机语言的比较

    Swift集成了传统面向对象编程语言的特性,同时又具备函数式编程的一些特征。在2014年WWDC之前,用来开发iOS应用的语言被称为Objective-C,它是标准C语言的扩展。使用Objective-C可以完成C语言所能完成的任何工作。这里不得不提到C++语言,事实上C++和Objective-C语言几乎是同时出现的。和Objective-C语言的简洁不同,C++语言几乎包含了所有可能的特性。

  2. Swift Name Mangling - Swift语言的名字重整技术

    在比如C这样的语言中,任何给定的名字(符号)只能对应唯一的一个函数或数据,不需要名字重整。因此,c++编译器使用一组严格的编码规则“mangles”(重整)了符号。想获取更多的关于经典C++编译器重整名字的内容,请参考ItaniumC++ABIdocumentation.总结:Object-C类似于C语言,Swift类似于C++,有函数重载,有虚函数表,需要命名重整。

  3. Swift3新路程1switch case

    上面的写法是正确的,编译不会报错,因为switch对所有的case做出了列举下面的写法是错误的,编译会报错,因为switch没有所有的case做出列举,需要添加default分支

  4. 你是如何评价Swift的,谈谈你的感受!

    假如之前已经掌握了Objective-C,切换到Swift也不难。Swift还没有很好地解决好跟C和C++混编的问题。随着时间推移,Swift在整个iOS/Mac工程中占的代码比例会越来越多,而Objective-C作为粘合层还是会存在。只是等你真正使用Swift编写一两个项目,就回不了头。Swift有些简便快速的写法,在Objective-C中是没有办法做到的。并且Swift的一些语言特性避免了很多Objective-C的坑。使用Swift编写的任何功能,使用Objective-C也可以做到,但是会麻烦

  5. 7.2 Swift中switch匹配枚举

    /**switch匹配枚举*/enumMethod{caseAddcaseSubcaseMulcaseDiv}funcchooseMethod(op:Method)->(Double,Double)->Double{switchop{case.Add:funcadd(a:Double,b:Double)->Double{returna+b}returnaddcase.Sub://返回一个闭包ret

  6. 2017 年热门编程语言排行榜,你的语言上榜没?

    2016年11月的排名结果显示,Java依然是最受大家欢迎的语言,C和C++排名紧随其后。GitHub在2016年9月年度会议之前,Github在此分享了其统计报告。随后它在平台上公布了热门语言排行表。该公司支持30多种编程语言,用户可随心选择。按照使用量排名,Java排在第一位,Javascript,PHP和C以一万多的差距尾随其后。

  7. swift – 使用具有非可选值赋值的guard

    我喜欢使用警卫,因为它可以使你的意图变得清晰.我已经将它用于这样的可选版本……以及检查非期权的更传统的边界……但现在我想在下面的代码中使用该计数.所以我做了…这显然不起作用,所以我做了应该……但是说条件绑定的Initializer必须具有Optional类型,而不是’Int’.现在我理解了错误,并尝试了一些看似明显的格式变化,但没有去.有没有办法使用guard作为非可选值的赋值?这似乎应该能够做到.如果你在那里扔一个案子,那就行了.如下:

  8. Swift 2协议扩展没有正确调用重写方法

    我一直在使用Swift2的协议扩展和默认实现遇到问题.基本要点是我提供了一个协议方法的默认实现,我在一个实现协议的类中重写.从基类调用该协议扩展方法,然后基类调用我在派生类中重写的方法.结果是没有调用重写的方法.我试图将这个问题提炼到最小的游乐场,这说明了下面的问题.不幸的是,协议没有这种动态行为(尚未).但是你可以通过在ParentClass中实现commonBehavior()并在ChildC

  9. 我可以在Swift的guard语句中使用范围运算符吗?

    我正试图找出另一种方法来做这样的事情,使用范围运算符.也许是这样的:要么这在Swift中可能吗?

  10. 在Android上解码Java或C/C++中的Airplay数据包

    提前致谢马特解决方法虽然Java编译为在虚拟机中运行的字节码,但它可能不一定比本机编译的可执行文件更慢(或更快).这一切都取决于程序!在这种情况下,Java可能会变慢,原因有很多:>解码实现可能只是编码/优化不佳?(我必须在这里注意,我不是Java的专家!)但是,我仍然不会调用Java本质上比C或C慢.我相信你可以在互联网上找到many-abenchmarks和测试,比较一种语言和另一种语言,有些人声称在一定程度上(出于骄傲和自我?

随机推荐

  1. iOS实现拖拽View跟随手指浮动效果

    这篇文章主要为大家详细介绍了iOS实现拖拽View跟随手指浮动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  2. iOS – genstrings:无法连接到输出目录en.lproj

    使用我桌面上的项目文件夹,我启动终端输入:cd然后将我的项目文件夹拖到终端,它给了我路径.然后我将这行代码粘贴到终端中找.-name*.m|xargsgenstrings-oen.lproj我在终端中收到此错误消息:genstrings:无法连接到输出目录en.lproj它多次打印这行,然后说我的项目是一个目录的路径?没有.strings文件.对我做错了什么的想法?

  3. iOS 7 UIButtonBarItem图像没有色调

    如何确保按钮图标采用全局色调?解决方法只是想将其转换为根注释,以便为“回答”复选标记提供更好的上下文,并提供更好的格式.我能想出这个!

  4. ios – 在自定义相机层的AVFoundation中自动对焦和自动曝光

    为AVFoundation定制图层相机创建精确的自动对焦和曝光的最佳方法是什么?

  5. ios – Xcode找不到Alamofire,错误:没有这样的模块’Alamofire’

    我正在尝试按照github(https://github.com/Alamofire/Alamofire#cocoapods)指令将Alamofire包含在我的Swift项目中.我创建了一个新项目,导航到项目目录并运行此命令sudogeminstallcocoapods.然后我面临以下错误:搜索后我设法通过运行此命令安装cocoapodssudogeminstall-n/usr/local/bin

  6. ios – 在没有iPhone6s或更新的情况下测试ARKit

    我在决定下载Xcode9之前.我想玩新的框架–ARKit.我知道要用ARKit运行app我需要一个带有A9芯片或更新版本的设备.不幸的是我有一个较旧的.我的问题是已经下载了新Xcode的人.在我的情况下有可能运行ARKit应用程序吗?那个或其他任何模拟器?任何想法或我将不得不购买新设备?解决方法任何iOS11设备都可以使用ARKit,但是具有高质量AR体验的全球跟踪功能需要使用A9或更高版本处理器的设备.使用iOS11测试版更新您的设备是必要的.

  7. 将iOS应用移植到Android

    我们制作了一个具有2000个目标c类的退出大型iOS应用程序.我想知道有一个最佳实践指南将其移植到Android?此外,由于我们的应用程序大量使用UINavigation和UIView控制器,我想知道在Android上有类似的模型和实现.谢谢到目前为止,guenter解决方法老实说,我认为你正在计划的只是制作难以维护的糟糕代码.我意识到这听起来像很多工作,但从长远来看它会更容易,我只是将应用程序的概念“移植”到android并从头开始编写.

  8. ios – 在Swift中覆盖Objective C类方法

    我是Swift的初学者,我正在尝试在Swift项目中使用JSONModel.我想从JSONModel覆盖方法keyMapper,但我没有找到如何覆盖模型类中的Objective-C类方法.该方法的签名是:我怎样才能做到这一点?解决方法您可以像覆盖实例方法一样执行此操作,但使用class关键字除外:

  9. ios – 在WKWebView中获取链接URL

    我想在WKWebView中获取tapped链接的url.链接采用自定义格式,可触发应用中的某些操作.例如HTTP://我的网站/帮助#深层链接对讲.我这样使用KVO:这在第一次点击链接时效果很好.但是,如果我连续两次点击相同的链接,它将不报告链接点击.是否有解决方法来解决这个问题,以便我可以检测每个点击并获取链接?任何关于这个的指针都会很棒!解决方法像这样更改addobserver在observeValue函数中,您可以获得两个值

  10. ios – 在Swift的UIView中找到UILabel

    我正在尝试在我的UIViewControllers的超级视图中找到我的UILabels.这是我的代码:这是在Objective-C中推荐的方式,但是在Swift中我只得到UIViews和CALayer.我肯定在提供给这个方法的视图中有UILabel.我错过了什么?我的UIViewController中的调用:解决方法使用函数式编程概念可以更轻松地实现这一目标.

返回
顶部