exit()与_exit()的区别
直接看图更明白:
从图中可以看出,_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()的区别相关推荐
- linux中进程退出函数:exit()和_exit()的区别
linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...
- 【C语言】exit()和_exit()的区别
1. 输出缓冲区 在linux系统上,一个进程默认打开三个文件: 标准输入stdin, 标准输出stdout, 标准输出错误stderr 2.printf()函数只是将内容写入到缓冲区,并没有直接输出 ...
- exit()与_exit()的区别(转)
http://blog.csdn.net/lwj103862095/article/details/8640037 从图中可以看出,_exit 函数的作用是:直接使进程停止运行,清除其使用的内存空间, ...
- Linux中exit与_exit的区别
在exit,_exit的区别 - exit()与_exit()函数的区别(Linux系统中)2012-03-20 15:19:53 分类: LINUX 注:exit()就是退出,传入的参数是程序退出时 ...
- linux下exit()与_exit()的区别
void exit(int staus) 函数, 在头文件 #include <stdlib.h> void _exit(int status) 函数,在头文件 #include < ...
- exit() 与_exit的区别
_exit()函数:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构; exit()函 数则在这些基础上作了一些包装,在执行退出之前加了若干道工序. exit()函数与_exi ...
- exit()和_exit()的区别
exit函数:定义在C标准库stdlib.h中:当我们调用exit(0)时,表示正常退出当前进程,当我们调用eixt(1)时表示非正常退出当前进程. _exit函数:定义在unistd.h中:直接使进 ...
- C语言exit()、_exit()的区别
exit() 使用exit()在进程退出之前会做两个动作 1.调用退出处理函数 2.清理I/O缓冲 eg: void ExitFun(void) {printf("exit fun\n&qu ...
- C语言exit/atexit/_exit的区别
(1)exit/atexit头文件stdlib.h _exit头文件unistd.h (2)简单来说:exit推出程序之前会干一堆工作,比如清除内存.清理内核中各种数据结构.清除缓冲区等.但_exit ...
最新文章
- html5 css3 卡片切换,HTML5之纯CSS3实现的tab标签切换
- 【MyBatis学习13】MyBatis中的二级缓存
- 【转】GPS定位原理
- 122. Leetcode 647. 回文子串 (动态规划-子序列问题)
- 苹果笔记本电脑好用吗_笔记本电脑市场格局重塑 可能比我们想象的来得更迅猛一些...
- Boost : to_string_stub用法的测试程序
- 当前框架下微服务开发注意事项 @Arthur
- idea database 添加字段不更新_如何借助IDEA数据库管理工具可视化使用TDengine?
- redis学习基本命令
- 属性动画中同一个动画改变多个属性
- 如何在github上找到自己想要的代码_如何在 GitHub 上找到免费且实用的软件?
- 三阶魔方还原 - 只需7步6个公式
- chrome误删书签恢复。
- linux下iso镜像的制作工具,ISO镜像文件制作转换工具(AnyToISO)
- 汇率换算自然语言理解功能JAVA DEMO
- 通信时代的发展与5G未来的发展方向以及面临的业务挑战
- (转)TTime, TDateTime
- 基于Redis的分布式链家二手房房源数据爬虫系统 毕业设计
- 49、建筑外墙上防火墙的设置
- 唐尼vr眼镜好吗_VR怎么看电影?手把手教你用VR眼镜设备看电影的方法
热门文章
- #翻译NO.5# --- Spring Integration Framework
- 宽带拨号时出现错误列表
- [转][.NET 基于角色安全性验证] 之三:ASP.NET Forms 身份验证
- vue-cli2.9.6 build项目无法访问资源 无法访问elementUI字体
- js es6数组常用方法:forEach map filter find every
- 【收藏】SonarQube-插件-离线安装PMD+阿里P3C
- Linux split命令:拆分大的tar压缩包然后解压
- storm后台启动命令(避免新开窗口)
- 使用npm init生成package.json
- scala函数的定义