直接看图更明白:

从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构;exit 函数则在这些基础上做了一些小动作,在执行退出之前还加了若干道工序。exit() 函数与 _exit() 函数的最大区别在于exit()函数在调用exit  系统调用前要检查文件的打开情况,把文件缓冲区中的内容写回文件。也就是图中的“清理I/O缓冲”。

所需头文件: exit:   #include<stdlib.h>

_exit: #include<unistd.h>

函数原型:exit:  void exit(int  status)

_exit:  void  _exit(int  status)

函数传入值:status 是一个整型的参数,可以利用这个参数传递进程结束时的状态。一般来说,0表示正常结束;其他的数值表示出现了错误,进程非正常结束。在实际编程时,父进程可以利用wait 系统调用接收子进程的返回值,从而针对不同的情况进行不同的处理。

exit()_exit() 实例分析

printf(const char *fmt,...)函数使用的是缓冲I/O方式,该函数在遇到 "\n" 换行符时自动从缓冲区中将记录读出。

代码实例:
#include<stdio.h>
#include<stdlib.h>
#include<sys/types.h>
#include<unistd.h>

int main()
{

pid_t result;
     result = fork();
     if(result<0)
     perror("fork");
     if(result == 0)
     {
             printf("This is _exit test\n");
             printf("This is the content in the buffer000");
            _exit(0);
     }
     else
     {
             printf("This is exit test\n");
             printf("This is the content in the buffer");
             exit(0);
     }
     return 0;
}

下面是运行结果:

结果分析:子进程中运行_exit(0)并未将Thisis the content in the buffer000 打印出来,而父进程中运行的exit(0)将Thisis the content in the buffer打印出来了。说明,exit(0)会在终止进程前,将缓冲I/O内容清理掉,所以即使printf里面没有 \n也会被打印出来,而_exit(0)是直接终止进程,并未将缓冲I/O内容清理掉,所以不会被打印出来。

参考于“https://www.cnblogs.com/LiuYanYGZ/p/5500424.html”

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

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

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

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

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

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

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

  4. Linux中exit与_exit的区别

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

  5. linux下exit()与_exit()的区别

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

  6. exit() 与_exit的区别

    _exit()函数:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构; exit()函 数则在这些基础上作了一些包装,在执行退出之前加了若干道工序. exit()函数与_exi ...

  7. exit()和_exit()的区别

    exit函数:定义在C标准库stdlib.h中:当我们调用exit(0)时,表示正常退出当前进程,当我们调用eixt(1)时表示非正常退出当前进程. _exit函数:定义在unistd.h中:直接使进 ...

  8. C语言exit()、_exit()的区别

    exit() 使用exit()在进程退出之前会做两个动作 1.调用退出处理函数 2.清理I/O缓冲 eg: void ExitFun(void) {printf("exit fun\n&qu ...

  9. C语言exit/atexit/_exit的区别

    (1)exit/atexit头文件stdlib.h _exit头文件unistd.h (2)简单来说:exit推出程序之前会干一堆工作,比如清除内存.清理内核中各种数据结构.清除缓冲区等.但_exit ...

最新文章

  1. html5 css3 卡片切换,HTML5之纯CSS3实现的tab标签切换
  2. 【MyBatis学习13】MyBatis中的二级缓存
  3. 【转】GPS定位原理
  4. 122. Leetcode 647. 回文子串 (动态规划-子序列问题)
  5. 苹果笔记本电脑好用吗_笔记本电脑市场格局重塑 可能比我们想象的来得更迅猛一些...
  6. Boost : to_string_stub用法的测试程序
  7. 当前框架下微服务开发注意事项 @Arthur
  8. idea database 添加字段不更新_如何借助IDEA数据库管理工具可视化使用TDengine?
  9. redis学习基本命令
  10. 属性动画中同一个动画改变多个属性
  11. 如何在github上找到自己想要的代码_如何在 GitHub 上找到免费且实用的软件?
  12. 三阶魔方还原 - 只需7步6个公式
  13. chrome误删书签恢复。
  14. linux下iso镜像的制作工具,ISO镜像文件制作转换工具(AnyToISO)
  15. 汇率换算自然语言理解功能JAVA DEMO
  16. 通信时代的发展与5G未来的发展方向以及面临的业务挑战
  17. (转)TTime, TDateTime
  18. 基于Redis的分布式链家二手房房源数据爬虫系统 毕业设计
  19. 49、建筑外墙上防火墙的设置
  20. 唐尼vr眼镜好吗_VR怎么看电影?手把手教你用VR眼镜设备看电影的方法

热门文章

  1. #翻译NO.5# --- Spring Integration Framework
  2. 宽带拨号时出现错误列表
  3. [转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证
  4. vue-cli2.9.6 build项目无法访问资源 无法访问elementUI字体
  5. js es6数组常用方法:forEach map filter find every
  6. 【收藏】SonarQube-插件-离线安装PMD+阿里P3C
  7. Linux split命令:拆分大的tar压缩包然后解压
  8. storm后台启动命令(避免新开窗口)
  9. 使用npm init生成package.json
  10. scala函数的定义