在谈论exit函数与_exit函数之前,我们先了解一下他们的使用场景,他们是在进程终止中使用的,那什么是进程终止呢?

进程终止

进程终止的场景:

(1)代码运行完毕,结果正确;
即就是进程中的所有代码都已执行完毕,而且运行结果也是你想要得到的,就像司马懿的一生,顺顺利利的结束,实现了自己的人生理想,最后也成为了千古名人
(2)代码运行完毕,结果不正确;
即就是进程中的所有代码都被执行,但是运行结果缺不是你想要得到的,就像诸葛亮一样,他的一生也算是很顺利的结束了,但是他却没有实现自己的人生抱负,给自己的人生留下了很大的遗憾。
(3)代码异常终止
即就是,代码没有被执行完,程序就结束了。就像小霸王孙策,英年早逝,没有到年龄就已过世,更不用说他有没有实现自己的梦想。

exit函数

头文件:#include<stdlib.h>和#include<unistd.h>函数原型:void exit(int status)
//status定义了进程的终止状态,父进程通过wait来获取该值
ps:虽然status是int,但是仅有低8位可以被父进程所用,所以_exit(-1_时,在终端执行$?发现返回值是255功能:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构。而且在执行退出之前执行用户定义的清理函数,冲刷缓冲,关闭流等

简单实现exit函数

代码:

#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
int main()
{printf("hello world.");exit(0);printf("hahaha");
}

运行结果:

-bash-4.1$ ./a.out
hello world.-bash-4.1$

ps: exit()函数会在终止进程前,将缓冲I/O内容清理掉,所以即使printf()里面没有”\n”也会被打印出来

_exit函数

头文件:#include<unistd.h>函数原型:void _exit(int status)
//status定义了进程的终止状态,父进程通过wait来获取该值
ps:虽然status是int,但是仅有低8位可以被父进程所用,所以_exit(-1_时,在终端执行$?发现返回值是255功能:直接使进程停止运行,清除其使用的内存空间,并清除其在内核的各种数据结构。

简单实现_exit函数

代码:

#include<stdio.h>
#include<unistd.h>
int main()
{printf("hello world.");_exit(0);printf("hahaha");
}

运行结果:

-bash-4.1$ ./a.out
-bash-4.1$

ps: 由运行结果可看出,_exit()函数是直接终止进程,并未将缓冲I/O内容清理掉,所以不会被打印出来

exit函数与_exit函数的区别


代码:

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
int main()
{pid_t pid;pid = fork();if(pid<0){perror("fork");exit(1);}else if(pid==0){printf("this is exit process.\n");printf("exit test");exit(0);}else{printf("this is _exit process.\n");printf("_exit test");_exit(0);}
}

运行结果:

-bash-4.1$ ./a.out
this is _exit process.
-bash-4.1$ this is exit process.
exit test

由此可看出,exit()会在进程终止前,将缓冲I/O内容清理掉,所以即使printf()函数里没有”\n”也会printf()的内容,而_exit()函数是直接终止进程,并未将缓冲I/O内容清理掉,所以不会被打印出来

exit()函数和_exit()函数最大的区别:

exit()函数在调用之前,会检查文件的打开情况,把文件缓冲区的内容写会文件,
而_exit()函数则不会进行任何操作,只是单纯的退出进程。

ps:exit()最后也会调用_exit(),但是调用exit()之前,还做了其他工作:
(1)执行用户通过atexit或on_exit定义的清理函数;
(2)关闭所有打开的流,所有的缓存数据均被写入;
(3)调用_exit().

return退出

return是一种更为常见的退出进程方法,执行return n等同于执行exit(n),
因为调用main的运行时函数会将main的返回值当做exit的参数

ps: printf函数使用的是缓冲I/O方式,该函数在遇到”\n”换行符时自动从缓冲区中将记录读出

exit函数和_exit函数的区别相关推荐

  1. exit()函数、_exit()函数 和 _Exit()函数

    一._exit()函数 和 _Exit()函数 main 函数中使用 return 后返回,return 执行后把控制权交给调用函数,结束该进程.调用_exit()函数会清除其使用的内存空间,并销毁其 ...

  2. exit函数和_exit函数的二三事

    我们知道做什么事情都是有始有终,在编程中也是一样.在Linux中创建一个进程后,程序的末尾我们要将其退出,在Linux中进程退出总共有八种方法,本篇文章主要讲解其中两个函数. 调用格式 #includ ...

  3. exit()与_exit()函数的区别

    注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXI ...

  4. exit()与_exit()函数的区别(Linux系统中)

    注:exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXI ...

  5. linux系统调用:exit()与_exit()函数详解【转】

    (转自:https://blog.csdn.net/drdairen/article/details/51896141) exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示 ...

  6. linux系统调用:exit()与_exit()函数详解

    exit()就是退出,传入的参数是程序退出时的状态码,0表示正常退出,其他表示非正常退出,一般都用-1或者1,标准C里有EXIT_SUCCESS和EXIT_FAILURE两个宏,用exit(EXIT_ ...

  7. 进程退出方法总结与exit函数_exit函数

    一.简介 一般情况下进程正常退出返回0,异常退出则返回相应的退出码.而一个程序一般的退出场景有以下三个: 代码运行结束,结果正确 代码运行结束,结果不正确 代码异常终止 常见的进程退出方式有正常结束和 ...

  8. C语言中exit(0)和_exit(0)

    1)题目要求 该实验有两个程序,第一个程序用printf函数先后输出:hello ,\n和world两句话.用exit(0)结束进程.第二个程序输出的内容同第一个程序,用_exit(0)结束进程. 相 ...

  9. _exit()函数与exit()函数的区别

    exit()在结束调用它的进程之前,要进行如下步骤: 1.cleanup(): 2.在atexit()注册的函数: 'exit()'与'_exit()'有不少区别在使用'fork()',特别是'vfo ...

最新文章

  1. 一文读懂图像局部特征点检测算法
  2. 静态页面中导航切换时的当前状态(四中方法)
  3. libvirt-adabddad
  4. ajaxfileupload带多个参数上传方法
  5. 小米4c手机显示无服务器,小米4c的出现让小米2S用户终于找到换手机的理由! _手机资讯...
  6. 对某自习室系统的一次渗透测试(从iot到getshell再到控制全国自习室)
  7. 分布式系统学习资料(ing)
  8. Java基础-this关键字和构造方法(10)
  9. linux系统工程师的前途在哪里
  10. 常见计算机密码破解实用手册
  11. 计算机专业窗体的事件何时触发,高三计算机专业VB试题(七)
  12. 电路串联和并联图解_迷惑我们很久的串联/并联谐振电路(多图、详解)
  13. python课后练习(高琪400集第一季.第五章)
  14. bzoj 1106: [POI2007]立方体大作战tet(贪心+树状数组)
  15. python辅助脚本教程_Python简单实现阴阳师挂机脚本
  16. mysqlReport 详细解析
  17. 银行测试(1)-我国的银行类型
  18. linux飞腾cpu,基于飞腾CPU+银河麒麟操作系统编译安装tensorflow
  19. C#(pronounced: see sharp) 与 .NET
  20. 宽带拨号密码查看工具

热门文章

  1. 计算机基础模块,计算机基础模块练习 (1)
  2. JAVA缓存规范 —— 虽迟但到的JCache API与天生不俗的Spring Cache
  3. scara机器人动荷载_SCARA机器人结构设计及轨迹规划算法.pdf
  4. 测试pppoe服务器性能,PPPOE服务器测试
  5. 反向传播BP思路梳理
  6. 简单总结笔试和面试中的海量数据问题
  7. [转]格式塔心理学5项法则的学习与思考
  8. layui表格一个单元格放多个数据
  9. 微生物所系统调查我国禾谷类作物镰刀菌病害,并更新镰刀菌属基因组生命树...
  10. Copy of ShortCut to