exit

C++ exit用法详解 当遇到 main 函数中的 return 语句时,C++ 程序将停止执行。但其他函数结束时,程序并不会停止。程序的控制将返回到函数调用之后的位置。然而,有时候会出现一些非常少见的情况,使得程序有必要在 main 以外的函数中终止。要实现这一点,可以使用 exit 函数。 当调用 exit 函数时,无论是哪个函数包含了该调用,都将导致程序停止。下面的程序演示了这一效果: #include <i... 阅读详情

索引

[说明]:内容总结自APUE第7章进程环境及第8章进程控制。


进程终止

  进程的终止方式分为正常终止与异常终止两种。其中正常终止方式有5种,异常终止方式有3种。

正常终止

  1. 从main返回。
  2. 调用exit。
  3. 调用_exit或_Exit。
  4. 最后一个线程从其启动例程返回。
  5. 最后一个线程调用pthread_exit。

异常终止

  1. 调用abort。
  2. 接到一个信号并终止。
  3. 最后一个线程对取消请求做出响应。

exit函数

  函数原型及所在头文件:

#include <stdlib.h>
void exit(int status);
void _Exit(int status);
#include <unistd.h>
void _exit(int status);

  使用不同头文件的原因是:exit和_Exit是由ISO C说明的,而_exit则是由POSIX.1说明的。
  _exit和_Exit立即进入内核,exit则先执行一些清理处理(包括调用执行各终止处理程序,关闭所有标准I/O流等),然后进入内核。

exit

  exit函数由ISO C定义,其操作包括:

调用各终止处理程序(终止处理程序在调用atexit函数时登记);
然后执行一个标准I/O库的清理关闭操作:为所有打开流调用fclose函数,这会造成所有缓冲的输出数据都被冲洗(写到文件上)。

  因为ISO C并不处理文件描述符、多进程(父、子进程)以及作业控制,所以这一定义对UNIX系统而言是不完整的。
  main函数返回一整型值与用该值调用exit是等价的。即在main函数中

exit(0);

  等价于

return 0;
_exit _Exit

  ISO C定义_Exit,其目的是为进程提供一种无需运行终止处理程序或信号处理程序而终止的方法。
  对标准I/O流是否进行冲流,这取决于实现。在UNIX系统中,_Exit和_exit是同义的,并不清洗标准I/O。
  _exit函数由exit调用,它处理UNIX特定的细节。

测试exit _exit _Exit

  下面分别对这三个函数进行简单的测试。

测试exit
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE * fp = fopen("./test", "w");
    if (fp)
    {
        fputs("hello world", fp);
        exit(1);                    // 直接调用exit,特意不调用fclose
    }

    return 0;
}

  编译完成后,执行程序,先看一下程序返回的状态码:
这里写图片描述
  可以看到,状态码为1,即程序执行到exit(1);之后,就结束了。接下来看一下文件test中是否写入了相关内容。
这里写图片描述
  可以看到,”hello world”成功的写入了文件中,即说明exit()函数冲洗了标准I/O。
  

测试_Exit
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE * fp = fopen("./test", "w");
    if (fp)
    {
        fputs("hello world", fp);
        _Exit(2);
    }

    return 0;
}

  下面来看一下效果
这里写图片描述
  可以看到,调用_Exit,并没有冲洗标准I/O。

测试_exit
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    FILE * fp = fopen("./test", "w");
    if (fp)
    {
        fputs("hello world", fp);
        _exit(3);
    }

    return 0;
}

  我们通过下面的运行结果可以看出,调用_exit和调用_Exit的效果是一样的,均没有冲洗标准I/O。
这里写图片描述


exit() 和 _exit() 的区别 exit()和_exit()的效果都是让程序退出执行,而_exit()用来“尽快”退出。 atexit() 先说一下atexit()函数。我们可以用atexit()注册一个或多个函数退出清理函数(或者on_exit()但这个函数不建议用),这些清理函数按照注册时的反顺序,在exit()或main函数return时被调用。 #include &lt;stdlib.h&gt; int a... 阅读详情

相关推荐

EXIT_SUCCESS、EXIT_FAILURE、return的区别和用法

EXIT_SUCCESS 和 EXIT_FAILURE 是C语言标准库中定义的两个宏,用于表示程序退出时的状态。在大多数系统中,

weixin_45778846的博客 1064

STM32基础之中断--外部中断

EXTI简介 EXTI(External interrupt/event controller)—外部中断/事件控制器,管理了控制器的 19个中断/事件线。每个中断/事件线都对应有一个边沿检测器,可以实现输入信号的上升沿检测和下降沿的检测。EXTI 可以实现对每个中断/事件线进行单独配置,可以单独配置为中断或者事件,以及触发事件的属性。 EXTI功能框图 输入线,EXTI 控制器有 19 个中断/事件输入线,这些输入线可以通过寄存器设置为任意一个 GPIO,也可以是一些外设的事件。输入线一般是存在电平变

HikD_bn的博客 5063

exit()和_exit()的区别

exit函数:定义在C标准库stdlib.h中;当我们调用exit(0)时,表示正常退出当前进程,当我们调用eixt(1)时表示非正常退出当前进程。 _exit函数:定义在unistd.h中;直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序。exit()函数在调用exit系统调用之前要检查文件的打开...

shimadear的博客 3225

EXIT(外部中断)控制实验

实验目的 设计使用外接的按键来作为触发源,使得控制器产生中断,并在中断服务函数中实现控制小灯的亮灭. 按键硬件点路 编程要点 初始化用来产生中断的 GPIO; 初始化 EXTI; 配置 NVIC; 编写中断服务函数; 具体代码如下 转载于:https://www.cnblogs.com/wenshinlee/p/8902406.htm...

weixin_30248399的博客 412

别再死记硬背公式了!用Unity ShaderGraph从零实现一个皮肤SSS效果(附完整节点图)

本文详细介绍了如何利用Unity ShaderGraph零代码实现皮肤次表面散射(SSS)效果,包括背光透射(BTDF)和表面散射(BSSRDF)的核心原理与节点构建方法。通过可视化工具,技术美术师和Shader初学者可以直观理解光线在皮肤组织中的散射行为,快速创建真实的皮肤材质效果,适用于游戏角色渲染等场景。

weixin_30838873的博客 590

SLG大地图实战:从Tilemap到Shader的地表渲染与数据分层架构

本文深入探讨了SLG大地图开发中的关键技术挑战与解决方案,包括Tilemap系统的深度改造、地表渲染的Shader优化以及数据分层架构设计。通过实战案例,展示了如何实现视觉表现丰富、性能开销可控的SLG大地图,特别适合Unity开发者和游戏技术美术参考。

weixin_28693309的博客 517

STM32之EXIT控制

1、什么是中断?1.1、查询机制 系统的查询机制有两种,第一种是软件轮询,利用CPU软件查询,浪费CPU时间,实时性不高。第二种就是中断,CPU内部中断控制器带软件查询,实时性高但是不够灵活。 中断是一种硬件查询机制,当某一件事情一旦发生必须执行,且我们不知道何时发生的时候,我们可以把这个事件配置为中断模式。1.2、常用名词定义 CPU在正常情况下运行的程序称为现行程序;向CPU提出申请中断...

Holmes_G的博客 2898

Android车载多屏开发实战:从零搭建同显/异显Demo(附源码)

本文详细介绍了Android车载多屏开发的实战经验,从零搭建同显/异显Demo,涵盖多屏模拟、核心API调用、同显/异显架构实现及性能优化等关键环节。通过C++构建完整开发链路,帮助开发者快速掌握多屏同显和多屏异显技术,提升智能座舱系统的交互体验。附源码供参考。

weixin_29233857的博客 403

Windows核心编程(二十四)终止处理程序及异常处理程序

结构化异常处理(Structuredexception handling)简称SEH。是windows系统提供的异常处理机制。促使windows将SEH加入到windows系统的一个关键原因就是:它可以简化操作系统本身的开发工作,同时还让系统更加健壮。 我们当然也可以在我们的程序中添加SEH机制,这样我们的应用程序也可以变得更加健壮。使用SEH,我们在编写代码时可以先集中精力完成软件的正常工

woshibendangao的专栏 1298

修勾逃生巨人危机v10.9.9修改版:免广告无限内购与GM工具详解

游戏修改技术是通过对原版游戏程序进行代码层面的调整,实现特定功能的增强或限制解除。其核心原理涉及内存修改、资源替换和API拦截等技术手段,能够有效提升用户体验和测试效率。在移动游戏领域,免广告和无限内购是常见的技术实现方向,通过屏蔽广告SDK调用和修改内购验证逻辑,为用户提供更流畅的游戏体验。这类技术特别适合游戏开发者进行功能测试,以及玩家希望完整体验游戏内容而不受商业模式限制的场景。以修勾逃生巨人危机v10.9.9版本为例,该修改版集成了GM工具开启功能,通过特定操作路径即可激活调试面板,实现了广告去除和

weixin_30855099的博客 2589

Fedproto:原型聚合的联邦学习框架

文中说明,联邦学习通过计算传递梯度聚合模型时,客户端之间的异构性通常会阻碍模型优化收敛和泛化性能。故本文提出新的FedProto框架,将梯度替换成为原型,通过计算、聚合从不同客户端收集到的本地原型,然后将全局原型发送回所有客户端,以规范本地模型的训练。对每个客户机进行局部训练的目的是最小化对本地数据的分类损失,同时保持生成的本地原型足够接近相应的全局原型(损失函数最小+正则)。什么是原型?文中提到:“

weixin_47754029的博客 2649

Linux -- exit()函数、_exit()函数、return的说明与使用

exit()函数和_exit()函数都是用来 终止进程 的。 return是C语言关键字,主要用于子函数的返回,标识这个子函数的结束。

青椒*^_^*凤爪爪的博客 1万+

海康visionmaster开发笔记10-集成HALCON第三方算子到VM工具箱的方法

海康visionmaster开发笔记10-HALCON第三方算子到VM工具箱的方法

视觉人机器视觉的博客 4346

函数exit()详解:参数EXIT_FAILURE(是1),EXIT_SUCCESS(是0)

前言 EXIT_FAILURE和EXIT_SUCCESS是C语言头文件库中定义的一个符号常量,在vc++6.0下头文件stdlib.h中定义如: #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 EXIT_FAILURE 可以作为exit()的参数来使用,表示没有成功的执行一个程序。 EXIT_SUCCESS作为exit()的参数来使用,表示成功地执行一个...

deniece1的博客 1万+

uniApp微信小程序:利用live-pusher人脸活体检测功能+完整示例代码,uniapp使用live-pusher直播推流组件实现人脸验证-活体检测,检测人脸中的动作包括眨眼、张嘴、左右摇头动作

UniApp 使用 live-pusher 实现人脸活体检测(附完整源码)uniapp开发微信小程序人脸检测活体检测,在uni-app的微信小程序项目中使用live-pusher实现人脸识别,uniapp使用live-pusher实现模拟人脸识别效果,张张嘴、眨眨眼、向左摇头、向右摇头等动作,免费使用人脸活体检测的插件方案,uniapp小程序怎么免费使用人脸活体,直播推流,UNIAPP微信小程序使用live-pusher实现人脸识别(拍照)功能,在uni-app项目中实现人脸识别,既使用uni-app中的l

✅ 精选推荐文章 3013

基于Python的股票K线图爬取与形态识别系统

本文详细介绍了一个基于Python的股票K线图爬取与形态识别系统。该系统通过网络爬虫技术获取股票历史数据,使用Matplotlib生成K线图,并应用卷积神经网络(CNN)对经典K线形态进行识别。文章详细阐述了数据采集、K线图生成、CNN模型构建与训练的完整流程,并提供了完整的代码实现。本研究为金融科技领域的毕业设计提供了有价值的参考方案。关键词:Python爬虫、K线图、卷积神经网络、形态识别、股票交易。

2201_76125261的博客 1033

exit()函数记录——exit(0),exit(1) 和 exit(-1)的区别

1、exit的功能为:退出当前运行的程序,并将参数value返回给主调进程。 2、exit(0),exit(1) 和 exit(-1)的区别 exit(0)表示程序正常退出;除了0之外,其他参数均代表程序异常退出,如:exit(1),exit(-1)。 exit(1)和exit(-1)是分别返回1和-1到主调程序。 exit(0)则是返回0。exit(0)表示程序正常退出,非0表示非...

weixiao的博客 2万+

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

exit(EXIT_FAILURE)

首先介绍一下: exit(0): 正常执行程序并退出程序。 exit(1): 非正常执行导致退出程序。 其次介绍: stdlib.h头文件中 定义了两个变量: #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 最后介绍: exit(EXIT_SUCCESS) : 代表安全退出。 exit(EXIT_FAILURE) : 代表异常退出。 ...

Numen的博客 1万+

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

C语言中的EXIT_FAILURE和EXIT_SUCCESS

前言 EXIT_FAILURE和EXIT_SUCCESS是C语言头文件库中定义的一个符号常量,在vc++6.0下头文件stdlib.h中定义如: #define EXIT_FAILURE 1 #define EXIT_SUCCESS 0 EXIT_FAILURE 可以作为exit()的参数来使用,表示没有成功的执行一个程序。 EXIT_SUCCESS作为exit()的参数来使用,表示成功地执行一个...

凌云俯瞰 8985

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

exit()函数和EXIT_SUCCESS,EXIT_FAILURE

今天在复习c语言时,看到了有关EXIT_SUCCESS和EXIT_FAILURE,发现不是很清楚,查阅了相关资料,大概总结了一下。 EXIT_SUCCESS和EXIT_FAILURE是C语言中头文件库中定义的一个符号常量,作为exit()的参数来使用,分别表示成功和没有成功的执行一个程序 exit()函数关闭了所有打开的文件并终止程序,exit()函数的参数会被传递给一些操作系统,通常的约定是正常终止的程序传递值0,非正常终止的程序传递非0值。不同的退出值可能用来标识导致程序的失败的不同原因,ANSIC标

m0_50275233的博客 4781

C++ EXIT_SUCCESS, EXIT_FAILURE

C++ EXIT_SUCCESS, EXIT_FAILUREEXIT\_SUCCESS, EXIT_FAILURE參考連結 EXIT_SUCCESS, EXIT_FAILURE 這兩個macro定義於C語言的<stdlib.h>(或C++的<cstdlib>): #define EXIT_SUCCESS /*implementation defined*/ #define ...

keineahnung2345的博客 992

C/C++ 中的 EXIT_SUCCESS and EXIT_FAILURE

C/C++ 中的 EXIT_SUCCESS and EXIT_FAILURE

程永强 3228

一些关于EXIT_FAILURE的描述

EXIT_FAILURE是C语言头文件库中定义的一个符号常量,在vc++6.0下头文件stdlib.h中定义如下: #define EXIT_FAILURE   1  EXIT_FAILURE 可以作为exit()的参数来使用,表示没有成功地执行一个程序。 EXIT_SUCCESS 作为exit()的参数来使用,表示成功地执行一个程序。   例子:   #include #

c_linux的专栏 8594

exit()函数、_exit()函数 和 _Exit()函数

main 函数中使用 return 后返回,return 执行后把控制权交给调用函数,结束该进程。调用_exit()函数会清除其使用的内存空间,并销毁其在内核中的各种数据结构,关闭进程的所有文件描述符,并结束进程、将控制权交给操作系统。调用函数需要传入 status 状态标志,0 表示正常结束、若为其它值则表示程序执行过程中检测到有错误发生。_exit()和_Exit()两者等价,用法作用是一样的,这 2 个函数都是系统调用。...

Bit_Dong的博客 4849

exit()与_exit()函数的区别

注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_SUCCESS);可读性比较好一点。 作为系统调用而言,_exit和exit是一对孪生兄弟,它们究竟相似到什么程度,我们可以从Linux的源码中找到答案: #def

Quartz's Blog 5862
上一篇: C++中打印变量或对象的地址
下一篇: atexit
linuxwuj
博客等级 码龄16年 25粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值