当前位置: 首页 » 电脑知识 » 电脑系统知识 » 正文

Linux下exit命令和_exit命令区别盘点

发布时间:2025-01-17 以下文章来源于网友投稿,内容仅供参考!

在Linux系统的命令中,exit命令和_exit命令看似相同实则有着不同的作用,那么exit命令和_exit命令具体有哪些区别呢?一起来了解下吧。

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

作为系统调用而言,_exit和exit是一对孪生兄弟,它们究竟相似到什么程度,我们可以从Linux的源码中找到答案:

#define __NR__exit __NR_exit

__NR_是在Linux的源码中为每个系统调用加上的前缀,请注意第一个exit前有2条下划线,第二个exit前只有1条下划线。 这时随便一个懂得C语言并且头脑清醒的人都会说,_exit和exit没有任何区别,但我们还要讲一下这两者之间的区别,这种区别主要体现在它们在函数库中的定义。_exit在Linux函数库中的原型是:

#i nclude《unistd.h》 void _exit(int status);

和exit比较一下,exit()函数定义在stdlib.h中,而_exit()定义在unistd.h中,从名字上看,stdlib.h似乎比 unistd.h高级一点,那么,它们之间到底有什么区别呢? _exit()函数的作用最为简单:直接使进程停止运行,清除其使用的内存空间,并销毁其在内核中的各种数据结构;exit() 函数则在这些基础上作了一些包装,在执行退出之前加了若干道工序,也是因为这个原因,有些人认为exit已经不能算是纯粹的系统调用。 exit()函数与_exit()函数最大的区别就在于exit()函数在调用exit系统调用之前要检查文件的打开情况,把文件缓冲区中的内容写回文件,就是清理I/O缓冲。

exit()在结束调用它的进程之前,要进行如下步骤:

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

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

3.最后调用_exit()函数终止进程。

_exit做3件事(man): 1,Any open file descriptors belonging to the process are closed 2,any children of the process are inherited by process 1, init 3,the process‘s parent is sent a SIGCHLD signal

exit执行完清理工作后就调用_exit来终止进程。

此外,另外一种解释:

简单的说,exit函数将终止调用进程。在退出程序之前,所有文件关闭,缓冲输出内容将刷新定义,并调用所有已刷新的出口函数(由atexit定义)。

_exit:该函数是由Posix定义的,不会运行exit handler和signal handler,在UNIX系统中不会flush标准I/O流。

简单的说,_exit终止调用进程,但不关闭文件,不清除输出缓存,也不调用出口函数。

共同:

不管进程是如何终止的,内核都会关闭进程打开的所有file descriptors,释放进程使用的memory!

关键词: Linux exit命令 Linux exit命令 Linux命令大全
  • • Linux下如何查杀pscan2木马?

    pscan2是一个黑客扫描程序,占用CPU非常大,所以中了该木马就要及时清除,那么要如何查找和清除pscan2木马呢?下面随小编一起来

  • • 如何解决Linux cd命令进入xargs管道输出目录报错的问题

    最近有网友在书写shell脚本的时候,发现使用cd命令无法进入xargs管道输出的目录,出现报错的情况,那么遇到这种情况可以使用修改

  • • Linux下修改debian wheezy默认配置的方法汇总

    Debian是一款提供您安装在计算机上使用的操作系统,Debian wheezy是Debian7系列的代号,那么Linux下debian wheezy的默认设置该如

  • • Linux中如何屏蔽storm ui的kill功能

    Linux系统中storm的ui有kill topology功能如果没有屏蔽的话,就会导致storm的topology很容易被人kill掉,如果你的topology出现被

  • • Linux下如何利用PC机进行路由转发

    在Linux操作系统中,我们只要简单的设置就能将Linux变成一台优秀的路由器,实现路由转发,下面将通过三台机子的实现来给大家详细

  • 京东联盟官网登录入口
    微盟官网
    阿里妈妈官网
    淘宝联盟官网
    百度广告联盟平台官网入口
    谷歌广告联盟平台官网
    穿山甲广告联盟官网
    腾讯广告推广平台入口
    辽宁师范大学研究生院:http://master.lnnu.edu.cn/
    沈阳建筑大学研究生院:http://grs.sjzu.edu.cn/
    大连外国语大学研究生处:http://gd.dlufl.edu.cn/gd/
    锦州医科大学研究生院:http://yjsc.jzmu.edu.cn/
    辽宁大学研究生院:http://grs.lnu.edu.cn/
    辽宁工业大学研究生院:http://yjsxy.lnut.edu.cn/
    大连海事大学研究生院:http://grs.dlmu.edu.cn/
    大连工业大学研究生院:http://yjs.dep.dlpu.edu.cn/
    东北大学研究生院:http://www.graduate.neu.edu.cn/
    沈阳理工大学研究生院:http://sites.sylu.edu.cn/yanjiusheng/