void exit(int staus) 函数, 在头文件 #include <stdlib.h>

void _exit(int status) 函数,在头文件 #include <unistd.h>中

在Linux & C中描述两者区别是:_exit返回后直接返回内核,而exit要进行清除工作,那么两者到底有什么不同呢。编写个小程序就很容易看出来:

int main(void){printf("hello linux c!");printf("i love u~");//exit(0);_exit(0);return 0;
}


对于这个程序对exit()和_exit两次调用结果是不想同的:

exit():

hello linux c!i love u~

_exit()则什么也没有输出,如果给第一个printf加上'\n'的话,那就只会输出第一句话。

那么我们简单谈一谈exit比_exit多做了些什么,其实exit结束进程也是调用了_exit函数,但是它在之前做了两点:

1.调用atexit()注册的函数(出口函数);按ATEXIT注册时相反的顺序调用所有由它注册的函数,这使得我们可以指定在程序终止时执行自己的清理动作.例如,保存程序状态信息于某个文件,解开对共享数据库上的锁等.

2.cleanup();关闭所有打开的流,这将导致写所有被缓冲的输出,删除用TMPFILE函数建立的所有临时文件。


这个的意思就是第一步将程序的信息保存,解开设的锁,第二步清空缓存,这个清空缓存就是写入文件。我们知道对于printf,为了输出的效率提高,计算机会将输入的信息存入缓存。最后写入标准输出文件输出。所以这就能解释为什么_exit什么都没有输出,因为它没有将缓存写入文件就已经退出。至于为什么加入'\n'后可以输出一句话这同样与缓存写入文件有关,printf函数在遇到“\n”换行符时自动的从缓冲区中将记录读出。



从这一点我们也可以看出一些问题,那就是如果fork一个子进程在退出该子进程的时候调用的是exit函数的话,那么它会刷新缓存,虽然是子进程执行的但是因为子进程与父进程共享地址,所以会出现的问题是标准输出文件被关掉,printf什么也没输出。但是这个问题对于linux是不会出现的,因为其exit时只是减少了一个对输出的文件的引用计数,并没有影响父进程。



综上所述,exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,_exit终止调用进程,但不关闭文件,不清除输出缓存。

linux下exit()与_exit()的区别相关推荐

  1. Linux中exit与_exit的区别

    在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...

  2. Linux下Exit和_exit函数说明

    exit和_exit函数都是用来终止进程的.当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB(进程控制块)在内的各种数据结构,并终止本进程的运行.但是,这两个函数是有区 ...

  3. linux中进程退出函数:exit()和_exit()的区别

    linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...

  4. 【C语言】exit()和_exit()的区别

    1. 输出缓冲区 在linux系统上,一个进程默认打开三个文件: 标准输入stdin, 标准输出stdout, 标准输出错误stderr 2.printf()函数只是将内容写入到缓冲区,并没有直接输出 ...

  5. linux中fopen和open的区别,Linux下open与fopen的区别

    int open(const char *path, int access,int mode) path 要打开的文件路径和名称 access 访问模式,宏定义和含义如下: O_RDONLY      ...

  6. linux中exit()和 _exit()说明

        exit和_exit函数都是用来终止进程的.当程序执行到exit或_exit时,系统无条件的停止剩下所有操作,清除包括PCB在内的各种数据结构,并终止本进程的运行.但是,这两个函数是有区别的. ...

  7. exit()与_exit()的区别(转)

    http://blog.csdn.net/lwj103862095/article/details/8640037 从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间, ...

  8. exit()与_exit()的区别

    直接看图更明白: 从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构:exit 函数则在这些基础上做了一些小动作,在执行退出之前还加了若干 ...

  9. linux 下的 source,sh,./三者区别

    前言 工作中遇到的问题,总结一下,参考较多文章总结的,若有错误,望请指出,谢谢! source Linux source命令: 通常用法:source filepath 或 . filepath 它的 ...

最新文章

  1. React.js入门笔记
  2. angularJS1笔记-(18)-$http及用angular实现JSONP跨域访问过程
  3. bigdecimal取小数部分_Java中BigDecimal保留两位小数点有哪些方法
  4. 推荐系统里,可以用蒸馏吗?
  5. gp数据库迁移数据到mysql_greenplum数据迁移
  6. ASP XML 编程简介
  7. python中find函数的使用方法_Python教程-String 字符串使用教程
  8. html 文字 向上滚动代码,文字向上滚动代码
  9. Oracle DG Broker 进行 SwitchOver Failover,Failover后恢复主从同步
  10. Android手机怎么找回微信好友,安卓手机微信怎么找回删除的好友?专业靠谱!...
  11. Hugging Face:成为机器学习界的“GitHub”
  12. 高数 | 【多元函数微分学 计算篇】链式求导法、隐函数求导法、全微分形式不变性、多元函数求极值
  13. 不要小看90后,图片贴纸应用“贴纸”上线17天登大陆摄影与录像类App第3位,下载破15万
  14. 谷歌浏览器android插件开发工具,ARC Welder:在谷歌浏览器运行安卓APK
  15. VIVO可能在某一段时间内手机充电数据线上并没有ID脚
  16. 霸王之业服务器未响应,三国群英传霸王之业常见问题解答_三国群英传霸业之业新人必看知识_3DM手游...
  17. PADS PCB如何设计邮票孔
  18. 关于绘制星级评价方法
  19. MATLAB---CAD显示三角网格
  20. 页面顶部导航栏css样式布局

热门文章

  1. 计算机图形学国际知名会议与期刊
  2. php判断caj文件页数,CAJ转PDF有哪些免费不限页数的方法?
  3. c语言斜线方程,切线方程公式
  4. NRF52x开发环境搭建详解
  5. adb 如何连接海马模拟器
  6. 2022-2028年全球及中国药片压片机行业发展现状调研及投资前景分析
  7. WEB视频播放器插件,总结
  8. 大数据之kafka简介
  9. python--re模块--黑科技
  10. 联想凌拓:谁更如愿以偿呢?