最近重新看了一下APUE, chapter 7中讲到进程终止有以下几种方式:1) 从main返回2) 调用exit3) 调用_exit或_Exit4) 最后一个线程返回5) 最后一个线程pthread_exit其中,对于2,3的区别书上说的是"_exit很快进入内核模式,而exit则执行处理操作",为了更好的理解这句话,我编写了下面的测试例子.(见后面的代码示例)测试环境:ubuntu 11.10gcc 4.7.1对于main的最后一行分别采用最近重新看了一下APUE, chapter 7中讲到进程终止有以下几种方式:1) 从main返回2) 调用exit3) 调用_exit或_Exit4) 最后一个线程返回5) 最后一个线程pthread_exit其中,对于2,3的区别书上说的是"_exit很快进入内核模式,而exit则执行处理操作",于是我编写了下面的测试例子.对于main的最后一行分别采用1) return 02) 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 calledglobal //释放全局数据** 而_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);}
相关推荐
手把手教你用ObjectCRX进行Caxa二次开发:从零开始的环境搭建教程
本文是一份面向零基础初学者的Caxa二次开发实战指南,重点讲解如何使用ObjectCRX框架从零开始搭建开发环境。内容涵盖Visual Studio 2015版本锁定、ObjectCRX向导集成、项目创建、典型错误解决,并最终实现一个可在Caxa中运行的HelloWorld程序,帮助开发者快速入门并避开常见陷阱。
exit 与 _exit的区别
从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构;exit 函数则在这些基础上做了一些小动作,在执行退出之前还加了若干道工序。exit() 函数与 _exit() 函数的最大区别在于exit()函数在调用exit 系统调用前要检查文件的打开情况,把文件缓冲区中的内容写回文件。也就是图中的“清理I/O缓冲”。 所需头文件: e
开源LocalAI本地人工智能安装教程
LocalAI是一款能在本地运行的人工智能应用,它兼容了OpenAI API规范,它可以在普通的电脑运行,不需要GPU,也不需要联网,音频转录
C语言复习小结
C语言细节部分复习
网工最容易搞混的三个概念:防火墙、网闸、堡垒机,一文让你轻松搞明白。
网闸的作用可以简单概括为:在两个或多个不同安全级别的网络(如内网和外网、普通网与高安全网、受限网与互联网)之间建立一个严格隔离、信息流转的安全桥梁。它的核心任务是实现数据安全传输与隔离,避免网络之间的直接连接带来的安全隐患。数据传输安全:网闸保证数据从一个网络到另一个网络时,能够进行审查、过滤和转换,防止恶意数据或非法信息被传入内部网络或外部泄露。高安全性隔离:网闸常常用于企业的内外网隔离、军事网络、政府机关等对数据隔离要求极高的环境。
Windows报错“The system cannot find the file specified“的PATH环境变量解决方案
摘要: Windows系统中出现"The system cannot find the file specified"错误通常因PATH环境变量配置问题导致。本文提供解决方案:1)检查并修正PATH变量(通过命令行或图形界面添加缺失路径);2)确认程序安装路径及拼写无误;3)恢复误改的系统变量。示例演示了Python路径配置及无效路径清理方法,建议谨慎修改变量、使用绝对路径并定期检查。附参考表格详述操作步骤,帮助用户高效解决问题并优化系统环境。
进程线程中,exit\_exit\return\pthread_exit各函数的含义以及区别
如果在分离状态的线程中调用pthread_exit(),则该线程会立即结束,不会影响其他线程或进程。与exit(-1)不同,pthread_exit(NULL)只会终止当前线程的执行,而不会终止整个程序的执行。在main()函数中使用return和在main()函数中调用exit()是等价的。总的来说,exit()和_exit()是用于结束进程的,而pthread_exit()是用于结束线程的。- pthread_exit(NULL)会立即终止当前线程的执行,但不会终止整个程序的执行。
房产平台系统小程序源码
🏠 一键解锁购房新体验 🔓房产小程序 实现前端 发布二手房 租房 商品 求租 求购等信息;后台发布 新房,二手房租房 商品 写字楼 求租求购等房源信息;功能完善的一块房产小程序。
linux的exit和_exit
exit()和_exit()
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
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适合高阶开发者。实际测试显示,不同工具在原型开发、算法实现等场景各有优势
多线程编程:return、pthread_exit()、exit()函数区别
多线程编程:return、pthread_exit()、exit()函数区别: return: 返回到调用者那里去 pthread_exit(): 将调用该函数的线程退出 exit(): 将进程退出
基于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句柄。
APUE读书笔记---进程间通信之POSIX共享内存区
APUE读书笔记—进程间通信之POSIX共享内存区1. 概述无亲缘关系进程间共享内存区的方法: 内存映射文件(memory-mapped file),有open函数打开,由mmap函数把得到的描述符映射到当前进程地址空间的一个文件。 共享内存对象(shared-memory object),由shm_open打开一个POSIX IPC名字(路径名),所返回的描述符由mmap函数映射到当前进程的地址空
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。通过...
复分析 阿尔福斯(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) ...
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...
APUE读书笔记-第七章 进程环境
今天一天就结了一章,确实挺快的,不过第六章的内容现在还用不太到,但第七章的内容我认为就比较关键了,主要是有关于进程环境的内容 7.2 main函数 这一小节介绍了简单介绍了有关于main函数的内容,我认为讲的很简单,所以给大家分享一点我之前的学习体会:http://blog.youkuaiyun.com/u012927281/article/details/51356228 7.3 进程终止 有8
APUE第八章进程控制读书笔记
总结 第八章主要讲了fork函数,exec系列函数,exit系列函数和wait系列函数的主要用途,这些函数可以对进程进行控制。后面还有一些对system函数,解释器文件,进程时间进程调度的简单介绍。重点内容在于对前面的几个系统调用的理解,还有孤儿进程,僵尸进程的概念。 重点笔记 fork函数调用之后,子进程和父进程共享正文段,其余的数据段,堆和栈被复制。且共享同一个文件偏移量。处理文件...
APUE读书笔记-第8章进程控制
第8章 进程控制 8.1 引言 *进程控制包括创建新进程、执行程序、进程终止 8.2 进程标识符 *每个进程都有一个非负整型的唯一进程ID。因为进程ID标识符总是唯一的,常将其用作其它标识符的一部分以保证其唯一性。例如,应用程序有时就把进程ID作为名字的一部分来创建一个唯一的文件名 *ID为0的进程通常是调度进程,常常被称为交换进程(swapper) *ID为1的进程通常是in
APUE读书笔记-第八章 进程控制
两天时间就把第七章看完了,这一章看得快,主要是有以前的基础,今天开始本书的重头戏:进程相关知识。之前看到过一句话:“Linux中除了进程都是文件”,我认为这句话虽然说的挺绝对的,但我想了一下,也没有什么特别好的反驳理由。这些都是题外话,开始今天的主题:进程控制。 8.2 进程标识 每个进程都有一个非负整型表示的唯一进程ID。虽然进程ID是唯一的,但某个ID被回收后,ID号是可以复用的。书中还给
(APUE读书笔记)进程环境
进程环境 一. main()函数 当内核执行C程序时(使用一个exec函数),在调用main前先调用一个特殊的启动例程。可执行程序文件将此启动例程指定为程序的起始地址——这是由连接编辑器设置的,而连接编辑器则由C编译器调用。启动例程从内核取得命令行参数和环境变量值,然后为按上述方式调用main函数做好安排。 二.进程终止 8种方式使进程终止(termination),其中
读书笔记----APUE(第一章)
1.内核的接口称为系统调用。 2.在创建新目录时会自动创建两个文件名:。(称为点当前目录)和。。(称为点-点父目录)。 3.exit()表示退出程序,括号内的值表示返回的值,一般成功返回0,失败返回1; 4.open,read,write.lseek 这些函数都是不用缓冲的io。 5.#define BUFFSIZE 4096 定义标准 6. outfile:表示重定向,将infile的
unix环境高级编程第八章读书笔记
终于又拿起了apue这本好书,再读第二遍真的是思路清晰了好多,人生真的是螺旋式的上升啊。哈哈! 进程标志: 系统中的每一个进程都会有自己的独一无二的进程标志(PID),书上说了几个重要的进程。0号进程是调度进程,1号进程是init进程是系统在自举完成后加载系统所需要的进程,它会依据一些在磁盘上的重要文件,来进行初始化操作。 函数fork: 这个函数还是很有意思的,它是一个会返回两次的函数,
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....
《APUE》读书笔记—第七章进程环境
本章主要介绍了Unix进程环境,包含main函数是如何被调用的,命令行参数如何传递,存储方式布局,分配存储空间,环境变量,进程终止方法,全局跳转longjmp和setjmp函数及进程的资源限制。 main函数的原型为int main(int argc,char *argv[]);其中argc是命令行参数的数目,argv是指向参数的各个指针构成的数组。当内核执行C程序时,使用一个exec函...
509



被折叠的 条评论
为什么被折叠?



