linux下exit与_exit的区别
来源:互联网 发布:sql 别名 as 编辑:程序博客网 时间:2024/05/01 08:39
1、exit与_exit函数的说明
这两个函数都是用来终止进程的。程序执行到exit或者_exit时,进程都会无聊见的停止剩下的所有操作,清除包括PCB在内的数据结构,并终止本进程的运行。但这两个函数还是有区别的。
exit:进程运行--->调用退出处理函数--->清理I/O缓冲--->调用exit系统调用--->程序终止运行。
_exit:进程运行--->调用exit系统调用--->程序终止运行。
由上面的流程可以看出来,该2个函数的最大区别就是:exit函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是上述的“清理I/O缓存”。
在Linux标准函数库中,有一种称作“缓冲I/O”操作:没打开一个文件,在内存中都有一片缓冲区。每次读写文件,都会连续读写若干条记录,下次读写文件就直接从内存缓冲区中读写,写操作则在满足一定条件之后,一次性写入文件。这样增加了文件读写速度,但会给编程带来一定麻烦,如果有一些数据,认为已经写入了文件,实际上还是在缓存区内,这时候调用_exit函数关闭进程,缓冲区中的数据就会丢失。因此,若想保证数据的完整性,就一定要用exit函数。
2、exit和_exit函数的使用实例:
#include <stdio.h>#include <stdlib.h>int mian(){ printf("Using exit...\n"); printf("This is the conten in buffer"); exit(0);}[root@(none)]#./exitUsing exit...This is the conten in buffer[root@(none)]#
调用exit函数时,缓冲区中的记录也能正常输出。
我们看看实例2:
#include <stdio.h>#include <stdlib.h>int mian(){ printf("Using exit...\n"); printf("This is the conten in buffer"); _exit(0);}[root@(none)]#./_exitUsing exit...[root@(none)]#
调用_exit函数无法输出缓冲区的记录。
小知识:
在一个进程调用exit之后,该进程并不会马上完全消失,而是留下一个成为僵尸进程的数据结构。僵尸进程时一种特殊的进程,它几乎已经放弃所有的内存空间,没有任何执行代码,也不能被调度,仅仅在进程列表中保留一个位置,记载该进程的退出状态等信息供其他进程收集,除此之外,僵尸进程不在占有任何内存空间。
- linux下exit与_exit的区别
- linux下exit()与_exit()的区别
- linux下exit()和_exit()的区别
- [linux]exit()与_exit()区别
- exit与_exit的区别
- exit()与_exit()的区别
- exit()与_exit()的区别
- _exit 与 exit 的区别
- exit 与 _exit的区别
- exit()与_exit()的区别
- exit() 与 _exit() 的区别
- exit()与_exit()的区别
- exit()与_exit()的区别
- exit()与_exit()的区别
- exit 与 _exit的区别
- exit()与_exit()的区别
- exit()与_exit()的区别
- exit与_exit的区别
- linux下设置MAC地址,IP地址,子网掩码,网关的命令
- KeyStore
- 面向对象之构造函数和析构函数之三
- 初识String和StringBuffer
- 面向对象思想设计
- linux下exit与_exit的区别
- jQuery EasyUI treegrid 增删改查 - 2
- mysql优化之explain备忘笔记
- 为什么OpenStack被视为新的Linux?
- Java学习——正则表达式
- 线程需要注意的概念
- jQuery EasyUI treegrid 增删改查 - 3
- openldap安装
- 淘宝发布《中国城市网购发展环境报告》 全文整理