exit()和_exit()函数
函数说明
创建进程使用fork()函数,执行进程使用exec函数族,终止进程则使用exit()和_exit()函数。当进程执行到exit()或_exit()函数时,进程会无条件的停止剩下的所有操作,清除各种数据结构,并终止本进程的运行。但是,这两个函数还是有区别的,其调用过程如图1所示:
从图1可以看出,_exit()函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的各种数据结构;而exit()函数则在这些基础上做了一些包装,在执行退出之前加了若干道工序。exit()函数和_exit()函数的最大区别就在于exit()函数在终止当前进程之前要检查该进程打开过哪些文件,把文件缓冲区中的内容写回文件,也就是图1中的“清理I/O缓冲”一项。
在Linux的标准函数库中,有一种被称作“缓冲I/O(buffered I/O)”的操作,其特征就是对应每一个打开的文件,在内存中都有一片缓冲区。
每次读文件时,会连续读出若干条记录,这样在下次读文件时就可以直接从内存的缓冲区中读取;同样,每次写文件时,也仅仅是写入内存中的缓冲区,等满足了一定的条件(如达到一定数量或遇到特定字符等,最典型的就是咱们的vim中使用的:w命令),再将缓冲区中的内容一次性写入文件。
这种技术大大增加了文件读写的速度,但也给咱们的编程带来了一些麻烦。比如有些数据你认为已经被写入到文件中,实际上因为没有满足特定的条件,它们还只是被保存在缓冲区内,这时用_exit()函数直接将进程关闭掉,缓冲区中的数据就会丢失。因此,若想保证数据的完整性,最好使用exit()函数。
函数语法
下表列出了exit()和_exit()函数的语法要点:
基础实验
以下两个基础实验1比较了exit()和_exit()函数的区别。由于 printf()函数使用的是缓冲I/O方式,该函数在遇到“\n”换行符时自动从缓冲区中将记录读出,以下两个基础实验就是利用这个性质来进行比较的。以下为实验1的代码:
执行结果如下图
从输出的结果可以看到,调用exit()函数时,缓冲区中的记录也能正常输出。
实验2的代码如下:
执行结果如下图:
从最后的结果可以看到,调用_exit()函数无法输出缓冲区中的记录。
如果在实验2中的代码中的 第二个代码加上回车符,那么结果会有不同了。自己试试哈!
相关推荐
Linux运维-3.Shell编程-12 shell编程-150exit语句.avi
Linux 基础 51-远程管理命令-10-PuTTY的安装和exit退出登录.flv
第1篇 Linux网络开发基础 第1章 Linux操作系统概述 2 1.1 Linux发展历史 2 1.1.1 Linux的诞生和发展 2 1.1.2 Linux名称的由来 3 1.2 Linux的发展要素 3 1.2.1 UNIX操作系统 4 1.2.2 Minix操作系统 4 ...
第1篇 Linux网络开发基础 第1章 Linux操作系统概述 2 1.1 Linux发展历史 2 1.1.1 Linux的诞生和发展 2 1.1.2 Linux名称的由来 3 1.2 Linux的发展要素 3 1.2.1 UNIX操作系统 4 1.2.2 Minix操作系统 4 ...
开源项目-simia-tech-go-exit.zip,go-exit: The exit strategy for your go routines.
exit()编程exit()编程exit()编程exit()编程exit()编程exit()编程
4.4.3 线程的结束函数pthread_join()和pthread_exit() 129 4.4.4 线程的属性 130 4.4.5 线程间的互斥 132 4.4.6 线程中使用信号量 133 4.5 小结 136 第2篇 Linux用户层网络编程 第5章 TCP/IP协议族简介 ...
开源项目-Code-Hex-exit.zip,Code-Hex/exit - Error makes exit code meaningful
Linux Socket服务器端编程实例 #include<string.h> string.h是预先定义好的函数库头文件,里面定义了一些字符串函数,如bzero等,添加这个头文件后才可以使用和字符串相关的操作函数 4 Linux-Socket-服务器编程实例...
开源项目-muja-go-exit.zip,A library to configure your application's exit behaviour.
创建新进程:fork函数:fork函数干什么? fork函数与vfork函数的区别在哪里?为何在一个fork的子进程分支中使用_exit函数而不使用exit函数?
实验楼 - 免费提供了Linux在线环境,不用在自己机子上装系统也可以学习Linux,超方便实用。 鸟哥的linux私房菜 - 非常适合Linux入门初学者看的教程。 Linux公社 - Linux相关的新闻...
分析了该编码系统的EXIT函数,以EXIT误差函数为代价函数,提出了自适应OFDMLDPC编码方案。该方案与传统自适应方案相比,不需要确定切换门限,数值计算简单,而且避免了计算子信道信噪比带来的误差,适用于高速通信...
Linux内核驱动模块编程指南 (内核版本2.2, 2.4) The Linux Kernel Module Programming Guide CHS Linux内核驱动模块编程指南 (内核版本2.2, 2.4) Peter Jay Salzman Ori Pomerantz 版权 © 2001 Peter Jay Salzman...
(1)在网上看了很多方案,类似于 在 hooks文件的 post-commit 文件中增加 || exit1 exit0;这种方案试过之后并没有解决问题; (2)最终解决方案,找到post-commit 文件的第52行,并把相应内容注释掉,问题得到了...
linux进程函数大全 atexit(设置程序正常结束前调用的函数) 相关函数 _exit,exit,on_exit表头文件 #include定义函数 int atexit (void (*function)(void));
介绍了exit的使用方法,以及各种功能,方便初学者进行学习
linux教程: 查看 Linux 命令帮助信息 - 关键词:help, whatis, info, which, where...Linux 系统管理 - 关键词:reboot, exit, shutdown, date, mount, umount, ps, kill, systemctl, service, crontab Linux 网络管理
实验过程中观察上升沿触发选择寄存器(EXIT_RTSR)和下降沿触发选择寄存器(EXIT_FTSR)的值对中断触发条件的影响,学习Cortex-M7外部中断线的设置方法和初始化,以及外部中断的触发方式和响应过程。 2.首先复现历程...