Linux的源码

#define __NR_exit                 1

#define __NR__exit __NR_exit /* 摘自文件include/asm-i386/unistd.h*/
"__NR_"是在Linux的源码中为每个系统调用加上的前缀,请注意第一个exit前有2条下划线,第二个exit前只有1条下划线。

Linux核心还提供了一些C语言函数库,这些库对系统调用进行了一些包装和扩展,因为这些库函数与系统调用的关系非常紧密,所以习惯上把这些函数也称为系统­调用。#define这句只能说明内核里的两个系统调用_exit和exit相同,但其封装后对应的C库函数_exit()和exit()是不同的。

exit()函数定义在stdlib.h中,而_exit()定义在unistd.h中;

exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit()函数则在这些基础上作了一些包装­,在执行退出之前加了若干道工序,也是因为这个原因,有些人认为exit已经不能算是纯粹的系统调用。

exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,即所谓的"清理I/O缓冲"。

‘exit()’与‘_exit()’有不少区别在使用‘fork()’,特别是‘vfork()’时变得很 突出。

‘exit()’与‘_exit()’的基本区别在于前一个调用与实施库里用户状态结构 (user-mode constructs)有关的清除工作(clean-up),而且调用用户自定义的清除程序 (译者注:自定义清除程序由atexit函数定义,可定义多次,并以倒序执行),相对 应,后一个函数只为进程实施内核清除工作。
在由‘fork()’创建的子进程分支里,正常情况下使用‘exit()’是不正确的,这是 因为使用它会导致标准输入输出(译者注:stdio: Standard Input Output)的缓冲区被 清空两次,而且临时文件被出乎意料的删除(译者注:临时文件由tmpfile函数创建 在系统临时目录下,文件名由系统随机生成)。在C++程序中情况会更糟,因为静 态目标(static objects)的析构函数(destructors)可以被错误地执行。(还有一些特殊情况,比如守护程序,它们的父进程需要调用‘_exit()’而不是子进程;适用于绝大多数情况的基本规则是,‘exit()’在每一次进入‘main’函数后只调用一次。)
在由‘vfork()’创建的子进程分支里,‘exit()’的使用将更加危险,因为它将影响 父进程的状态

exit(),_exit()的区别相关推荐

  1. Linux中exit与_exit的区别

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

  2. fork vfork exit _exit (转)

    原文地址:http://hi.baidu.com/ikaruga11/blog/item/fb6d75725a8d8d148701b080.html APUE上的一个例子: example1 (for ...

  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如何在C程序中使用exit,c语言exit和return区别,在fork和vfork中使用

    exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: return():返回函数,若在main主函数中,则会退出函数并返 ...

  6. linux中exit和fatal区别,关于Linux系统命令中exit与exit的区别

    关于Linux系统命令中exit与exit的区别 注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和 ...

  7. c语言exit和return区别,在fork和vfork中使用

    转自c语言exit和return区别,在fork和vfork中使用 exit函数在头文件stdlib.h中. 简述: exit(0):正常运行程序并退出程序: exit(1):非正常运行导致退出程序: ...

  8. 6.exit _exit _Exit

    进程的终止有8种方式,5种正常终止和3中异常终止 5种正常终止: 1:从 main 执行return返回. 2:调用 exit(int x), 程序返回码是x,调用各种中止处理程序,关闭或冲洗缓冲区. ...

  9. exit()函数记录——exit(0),exit(1) 和 exit(-1)的区别

    1.exit的功能为:退出当前运行的程序,并将参数value返回给主调进程. 2.exit(0),exit(1) 和 exit(-1)的区别 exit(0)表示程序正常退出:除了0之外,其他参数均代表 ...

最新文章

  1. golang 执行外部命令 超时处理 exec.CommandContext
  2. 删除数据库里面所有表!
  3. 2021云数据库RDS重磅升级发布会
  4. Fiori navigation list scroll down后自动发OData请求取数据
  5. Win32 远程线程
  6. Delphi 两种类的声明方法
  7. 你还记得珠算的口诀吗?
  8. 如何重新安装win2008服务器系统分区,怎么解决安装server2008后磁盘分区消失的方法步骤...
  9. 微信小程序遇到的那些坑
  10. java lc ctype_postgresql中的 LC_CTYPE、LC_COLLATE
  11. android抓socket数据包,sokit-1.3 CommMonitor 串行端口监视精灵 友善串口调试助手
  12. mysql中的分隔符有哪些_MySQL中的分隔符
  13. CityEngine + Python自动化建模原理【系列文章之三】
  14. 优百佳X784时装界的雷诺阿——高田贤三
  15. c语言在屏幕上输出一个菱形图案,C语言 在屏幕上输出菱形图案
  16. 图片缩略图,CMYK图片变红问题解决
  17. 一个PHP程序员的职业生涯技术提升阶梯规划方案
  18. 服务器发来的信息手机收不到,收不到QQ好友发来的信息
  19. 水晶报表(crystal reports)--java
  20. front-matter参数的解释与设置

热门文章

  1. 用户体验可视化指南pdf_R中增强可视化的初学者指南
  2. unity3d 可视化编程_R编程系列:R中的3D可视化
  3. handler 消息处理机制
  4. 5193. 删除字符使字符串变好
  5. leetcode 852. 山脉数组的峰顶索引(二分查找)
  6. leetcode 888. 公平的糖果棒交换(set)
  7. webassembly_WebAssembly的设计
  8. angular面试题及答案_关于最流行的Angular问题的StackOverflow上的48个答案
  9. 速度与激情的Webpack
  10. 1.移动端测试知识笔记(面试必备,测试点,adb命令)