[APUE读书笔记] 有关exit 和_exit区别的比较

CXL协议-第三章 CXL事务层 CXL.io为I/O设备提供了一个非一致的负载/存储接口。图3-1显示了Flex总线分层层次结构中的位置。事务类型、事务分组格式、基于信用的流量控制、虚拟通道管理和事务排序规则遵循PCIe*定义,详情请参考PCIe基础规范的“事务层规范”章节。本章重点介绍了用于CXL.io的著名的PCIe操作模式或特性。 阅读详情
最近重新看了一下APUE, chapter 7中讲到进程终止有以下几种方式:
1) 从main返回
2) 调用exit
3) 调用_exit或_Exit
4) 最后一个线程返回
5) 最后一个线程pthread_exit
  其中,对于2,3的区别书上说的是"_exit很快进入内核模式,而exit则执行处理操作",为了更好的理解这句话,我编写了下面的测试例子.(见后面的代码示例)
测试环境:
ubuntu 11.10
gcc 4.7.1
对于main的最后一行分别采用
最近重新看了一下APUE, chapter 7中讲到进程终止有以下几种方式:
1) 从main返回
2) 调用exit
3) 调用_exit或_Exit
4) 最后一个线程返回
5) 最后一个线程pthread_exit
  其中,对于2,3的区别书上说的是"_exit很快进入内核模式,而exit则执行处理操作",于是我编写了下面的测试例子.
  对于main的最后一行分别采用
1) return 0
2) exit (0)
3) _exit (0)
4) _Exit (0)
几种方式,结论如下
** return 0 与 exit (0)等价,在main返回后,分别会执行下面的动作序列:
    main ends here //先从main返回
    local //释放栈上的局部变量
    my exit 2 called //以出栈的方式调用axexit注册的函数
    my exit 1 called
    global //释放全局数据
** 而_exit (0) 与 _Exit(0)是等价的,见libC 25.6.5 Termination Internals.
  只产生下面的动作序列:
    main ends here
**** 结论:            
可见 _exit(0) 与 _Exit(0)的返回速度的确比 exit (0) 和 return (0)要快,换言之,_exit (0) 与 _Exit (0) 的确没有做数据的收尾工作就匆匆返回了.
在实际使用中,如果可能不用_exit (0)和_Exit (0)的话,还是少用把    
下面是有关_exit的说明:

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(2) family of calls.

The function _Exit() is equivalent to _exit(). 

                                                                   
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
#include <string>
using std::string;
#include <unistd.h>
void myexit1()
{
    fprintf(stderr,"my exit 1 called\n");
}
void myexit2()
{
    fprintf(stderr,"my exit 2 called\n");
}
class MyClass
{
public:
    MyClass(string name)
    {
        mName = name;
    }
    ~MyClass()
    {
        cout <<mName << endl;
    }
    string mName ;
};
MyClass bb("global");
int main()
{
    MyClass bb("local");
    atexit (myexit1);
    atexit (myexit2);
    fprintf(stderr,"main ends here\n");
    _Exit (0);
}

        
【OpenClaw企业级智能体实战】第11篇:制造业设备预测性维护实战——OpenClaw+DeepSeek+Prometheus从零搭建(附完整代码) 本文聚焦制造业设备预测性维护的核心痛点,基于OpenClaw v2026.2.1、DeepSeek智能诊断、Prometheus监控等工具,拆解“设备状态监控→智能故障诊断→预测性维护”三大核心场景。从技术原理、算法构建、实操流程到完整代码实现,提供“数据采集→模型训练→智能调度→自动处置”的全链路方案。方案遵循工业安全规范,采用“只读优先、权限最小化”原则,适配中小制造企业落地需求。通过虚拟案例验证,可使设备非计划停机时间下降65%、平均修复时间缩短47%,既适合新手快速入门,也为进阶读者提供架构优化思路 阅读详情

相关推荐

手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程

本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。

w3x4y的博客 509

exit 与 _exit的区别

从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构;exit 函数则在这些基础上做了一些小动作,在执行退出之前还加了若干道工序。exit() 函数与 _exit() 函数的最大区别在于exit()函数在调用exit  系统调用前要检查文件的打开情况,把文件缓冲区中的内容写回文件。也就是图中的“清理I/O缓冲”。   所需头文件: e

GoingArm的专栏 1426

开源LocalAI本地人工智能安装教程

LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录

2301_78652552的博客 3613

C语言复习小结

C语言细节部分复习

weixin_59454731的博客 1519

网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。

网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。

HWP18612324139的博客 3636

Windows报错“The system cannot find the file specified“的PATH环境变量解决方案

摘要: Windows系统中出现"The system cannot find the file specified"错误通常因PATH环境变量配置问题导致。本文提供解决方案:1)检查并修正PATH变量(通过命令行或图形界面添加缺失路径);2)确认程序安装路径及拼写无误;3)恢复误改的系统变量。示例演示了Python路径配置及无效路径清理方法,建议谨慎修改变量、使用绝对路径并定期检查。附参考表格详述操作步骤,帮助用户高效解决问题并优化系统环境。

shejizuopin的博客 3515

进程线程中,exit\_exit\return\pthread_exit各函数的含义以及区别

如果在分离状态的线程中调用pthread_exit(),则该线程会立即结束,不会影响其他线程或进程。与exit(-1)不同,pthread_exit(NULL)只会终止当前线程的执行,而不会终止整个程序的执行。在main()函数中使用return和在main()函数中调用exit()是等价的。总的来说,exit()和_exit()是用于结束进程的,而pthread_exit()是用于结束线程的。- pthread_exit(NULL)会立即终止当前线程的执行,但不会终止整个程序的执行。

qq_53090814的博客 1014

房产平台系统小程序源码

🏠 一键解锁购房新体验 🔓房产小程序 实现前端 发布二手房 租房 商品 求租 求购等信息;后台发布 新房,二手房租房 商品 写字楼 求租求购等房源信息;功能完善的一块房产小程序。

2401_84413757的博客 795

linux的exit和_exit

exit()和_exit()

gogo0707的博客 1835

Julia Ann老司机管理系统

https://content.badgirlsusa.com/Julia_Ann-Sexy_Julia_Ann_Fucks_A_Lil_Elf's_Big_Cock_/Julia-Ann-Naughty-America-%E6%80%A7%E6%84%9F%E7%9A%84%E8%A3%98%E8%8E%89%E5%A9%AD%E5%AE%89%E4%BA%82%E6%90%9E-lil-%E7%B2%BE%E9%9D%88%E7%9A%84%E5%A4%A7%E5%85%AC%E9%9B%9E-2020

www_oracle_com的博客 22万+

AI编程工具深度对比:Cursor、Copilot、Trae与Claude Code,2025年开发者该如何选择?

2025年AI编程工具市场已形成四大主力阵营:Cursor(AI原生IDE)、GitHub Copilot(行业标准)、Trae(中国免费方案)和Claude Code(终端交互)。核心差异体现在技术能力(代码生成准确率85%-95%)、智能体协作程度和上下文处理能力(8K-200K tokens)。用户体验方面,Trae对中文支持最佳且免费,Copilot企业集成强,Cursor平衡易用与功能,Claude Code适合高阶开发者。实际测试显示,不同工具在原型开发、算法实现等场景各有优势

fudaihb的博客 6496

多线程编程:return、pthread_exit()、exit()函数区别

多线程编程:return、pthread_exit()、exit()函数区别: return: 返回到调用者那里去 pthread_exit(): 将调用该函数的线程退出 exit(): 将进程退出

ctrigger的专栏 1149

基于STM32L4XX、HAL库的MMA8452QR1姿态传感器驱动程序设计

/ HAL库需要左移1位。#define MMA8452Q_I2C_ADDRESS 0x1D // SA0=1时的地址。* @param range: 量程(MMA8452Q_RANGE_2G/4G/8G)* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。* @param haccel: MMA8452Q句柄。

zhusl6688的博客 770

APUE读书笔记---进程间通信之POSIX共享内存区

APUE读书笔记—进程间通信之POSIX共享内存区1. 概述无亲缘关系进程间共享内存区的方法: 内存映射文件(memory-mapped file),有open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间的一个文件。 共享内存对象(shared-memory object),由shm_open打开一个POSIX IPC名字(路径名),所返回的描述符由mmap函数映射到当前进程的地址空

men_wen的博客 596

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

APUE读书笔记:进程控制

重点函数:fork,exit,_exit 一、fork 函数原型: #include <unistd.> pid_t fork(void) 函数说明:fork函数将创建一个子进程,该函数调用一次,但是有两次返回。子进程返回值为0,父进程的返回值是该子进程的进程ID。 小技巧:父进程能够拿到该次fork生成的子进程的ID,这是唯一的机会。而子进程不需要关心自己的进程ID。通过...

weixin_30364147的博客 113

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

APUE读书笔记——第七章 进程环境

1. main函数:int main(int argc, char* argv[]),调用main函数前系统先调用一个特殊的启动例程,它从内核取得命令行参数和环境变量值,为调用main函数做好安排。 2. 进程终止方式8种,5种正常终止: a) main 函数return b) 调用exit c) 调用_exit或_Exit d) 最后一个线程从其启动例程返回 e) 最后一个线程调用pthread_exit 异常终止3种方式 a) 调用abort b) ...

Whu_Zhangyu1的博客 227

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

APUE读书笔记(11) 进程控制(中)

一:函数exit   进程有五种正常终止的方式和三种异常终止的方式。五种正常的退出方式为:   1.main中调用return,等效于调用exist   2.调用exit函数   3.调用_exit和_Exit函数。   4.进程的最后一个线程启动例程中调用return语句。   5.进程的最后一个线程调用pthread_exit函数。   三种异常的退出方式为:   1.调用abort。   2...

myz123321的博客 233

APUE读书笔记-第七章 进程环境

今天一天就结了一章,确实挺快的,不过第六章的内容现在还用不太到,但第七章的内容我认为就比较关键了,主要是有关于进程环境的内容 7.2 main函数 这一小节介绍了简单介绍了有关于main函数的内容,我认为讲的很简单,所以给大家分享一点我之前的学习体会:http://blog.youkuaiyun.com/u012927281/article/details/51356228 7.3 进程终止 有8

Andy.Wang的博客 628

APUE第八章进程控制读书笔记

总结 第八章主要讲了fork函数,exec系列函数,exit系列函数和wait系列函数的主要用途,这些函数可以对进程进行控制。后面还有一些对system函数,解释器文件,进程时间进程调度的简单介绍。重点内容在于对前面的几个系统调用的理解,还有孤儿进程,僵尸进程的概念。 重点笔记 fork函数调用之后,子进程和父进程共享正文段,其余的数据段,堆和栈被复制。且共享同一个文件偏移量。处理文件...

windyear 242

APUE读书笔记-第8章进程控制

第8章 进程控制 8.1 引言 *进程控制包括创建新进程、执行程序、进程终止 8.2 进程标识符 *每个进程都有一个非负整型的唯一进程ID。因为进程ID标识符总是唯一的,常将其用作其它标识符的一部分以保证其唯一性。例如,应用程序有时就把进程ID作为名字的一部分来创建一个唯一的文件名 *ID为0的进程通常是调度进程,常常被称为交换进程(swapper) *ID为1的进程通常是in

高雪林的专栏 948

APUE读书笔记-第八章 进程控制

两天时间就把第七章看完了,这一章看得快,主要是有以前的基础,今天开始本书的重头戏:进程相关知识。之前看到过一句话:“Linux中除了进程都是文件”,我认为这句话虽然说的挺绝对的,但我想了一下,也没有什么特别好的反驳理由。这些都是题外话,开始今天的主题:进程控制。 8.2 进程标识 每个进程都有一个非负整型表示的唯一进程ID。虽然进程ID是唯一的,但某个ID被回收后,ID号是可以复用的。书中还给

Andy.Wang的博客 1102

(APUE读书笔记)进程环境

进程环境 一. main()函数   当内核执行C程序时(使用一个exec函数),在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编辑器则由C编译器调用。启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排。   二.进程终止   8种方式使进程终止(termination),其中

leonidasFlames的专栏 620

读书笔记----APUE(第一章)

1.内核的接口称为系统调用。 2.在创建新目录时会自动创建两个文件名:。(称为点当前目录)和。。(称为点-点父目录)。 3.exit()表示退出程序,括号内的值表示返回的值,一般成功返回0,失败返回1; 4.open,read,write.lseek 这些函数都是不用缓冲的io。 5.#define BUFFSIZE 4096 定义标准 6. outfile:表示重定向,将infile的

行走在路上 505

unix环境高级编程第八章读书笔记

终于又拿起了apue这本好书,再读第二遍真的是思路清晰了好多,人生真的是螺旋式的上升啊。哈哈! 进程标志: 系统中的每一个进程都会有自己的独一无二的进程标志(PID),书上说了几个重要的进程。0号进程是调度进程,1号进程是init进程是系统在自举完成后加载系统所需要的进程,它会依据一些在磁盘上的重要文件,来进行初始化操作。 函数fork: 这个函数还是很有意思的,它是一个会返回两次的函数,

算法虐我千百遍 398

APUE读书笔记(九)线程及线程同步

文章目录1 线程标识1.1 线程ID的比较函数pthread_equal1.2 线程获得自身的线程ID函数pthread_self2 线程的基本操作函数2.1 线程创建函数pthread_create2.2 等待线程结束函数pthread_join2.3 线程终止函数pthread_exit2.4 实例3 线程同步3.1 互斥量3.1.1 互斥量的各种函数原型3.1.2 实例3.2 读写锁3.2....

缇珞的博客 361

《APUE》读书笔记—第七章进程环境

  本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制。   main函数的原型为int main(int argc,char *argv[]);其中argc是命令行参数的数目,argv是指向参数的各个指针构成的数组。当内核执行C程序时,使用一个exec函...

weixin_34220179的博客 112
上一篇: 为何java里的Thread类的方法suspend()和resume()不推荐使用?
下一篇: pthread_cleanup_push & pthread_cleanup_pop总结
乔巴好萌
博客等级 码龄15年 228粉丝 47原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值