• <output id="aynwq"><form id="aynwq"><code id="aynwq"></code></form></output>

    <mark id="aynwq"><option id="aynwq"></option></mark>
  • <mark id="aynwq"><option id="aynwq"></option></mark><label id="aynwq"><dl id="aynwq"></dl></label>
  • 學習啦 > 學習電腦 > 操作系統(tǒng) > Linux教程 > Linux下exit命令和

    Linux下exit命令和

    時間: 孫勝龍652 分享

    Linux下exit命令和

      在Linux系統(tǒng)的命令中,exit命令和_exit命令看似相同實則有著不同的作用,那么exit命令和_exit命令具體有哪些區(qū)別呢?一起來和學習啦小編了解下吧。

      注:exit()就是退出,傳入的參數(shù)是程序退出時的狀態(tài)碼,0表示正常退出,其他表示非正常退出,一般都用-1或者1,標準C里有EXIT_SUCCESS和EXIT_FAILURE兩個宏,用exit(EXIT_SUCCESS);可讀性比較好一點。

      作為系統(tǒng)調(diào)用而言,_exit和exit是一對孿生兄弟,它們究竟相似到什么程度,我們可以從Linux的源碼中找到答案:

      #define __NR__exit __NR_exit /* 摘自文件include/asm-i386/unistd.h第334行 */

      “__NR_”是在Linux的源碼中為每個系統(tǒng)調(diào)用加上的前綴,請注意第一個exit前有2條下劃線,第二個exit前只有1條下劃線。 這時隨便一個懂得C語言并且頭腦清醒的人都會說,_exit和exit沒有任何區(qū)別,但我們還要講一下這兩者之間的區(qū)別,這種區(qū)別主要體現(xiàn)在它們在函數(shù)庫中的定義。_exit在Linux函數(shù)庫中的原型是:

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

      和exit比較一下,exit()函數(shù)定義在stdlib.h中,而_exit()定義在unistd.h中,從名字上看,stdlib.h似乎比 unistd.h高級一點,那么,它們之間到底有什么區(qū)別呢? _exit()函數(shù)的作用最為簡單:直接使進程停止運行,清除其使用的內(nèi)存空間,并銷毀其在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);exit() 函數(shù)則在這些基礎上作了一些包裝,在執(zhí)行退出之前加了若干道工序,也是因為這個原因,有些人認為exit已經(jīng)不能算是純粹的系統(tǒng)調(diào)用。 exit()函數(shù)與_exit()函數(shù)最大的區(qū)別就在于exit()函數(shù)在調(diào)用exit系統(tǒng)調(diào)用之前要檢查文件的打開情況,把文件緩沖區(qū)中的內(nèi)容寫回文件,就是“清理I/O緩沖”。

      exit()在結(jié)束調(diào)用它的進程之前,要進行如下步驟:

      1.調(diào)用atexit()注冊的函數(shù)(出口函數(shù));按ATEXIT注冊時相反的順序調(diào)用所有由它注冊的函數(shù),這使得我們可以指定在程序終止時執(zhí)行自己的清理動作。例如,保存程序狀態(tài)信息于某個文件,解開對共享數(shù)據(jù)庫上的鎖等。

      2.cleanup();關(guān)閉所有打開的流,這將導致寫所有被緩沖的輸出,刪除用TMPFILE函數(shù)建立的所有臨時文件。

      3.最后調(diào)用_exit()函數(shù)終止進程。

      _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執(zhí)行完清理工作后就調(diào)用_exit來終止進程。

      此外,另外一種解釋:

      簡單的說,exit函數(shù)將終止調(diào)用進程。在退出程序之前,所有文件關(guān)閉,緩沖輸出內(nèi)容將刷新定義,并調(diào)用所有已刷新的“出口函數(shù)”(由atexit定義)。

      _exit:該函數(shù)是由Posix定義的,不會運行exit handler和signal handler,在UNIX系統(tǒng)中不會flush標準I/O流。

      簡單的說,_exit終止調(diào)用進程,但不關(guān)閉文件,不清除輸出緩存,也不調(diào)用出口函數(shù)。

      共同:

      不管進程是如何終止的,內(nèi)核都會關(guān)閉進程打開的所有file descriptors,釋放進程使用的memory!

    305249 主站蜘蛛池模板: 浮力国产第一页| 啊灬啊灬啊灬快灬深用力| 女人18毛片一级毛片在线| 最近韩国免费观看hd电影国语| 精品国产乱码久久久久久浪潮| 激情五月婷婷色| 99RE66在线观看精品免费| 久久久久亚洲精品无码蜜桃 | 无遮挡一级毛片视频| 欧美色图亚洲天堂| 美国一级大黄一片免费网站| 国产精选之刘婷野战| 18禁男女无遮挡啪啪网站| 一本久到久久亚洲综合| 久久精品aⅴ无码中文字字幕重口| 亚洲黄色第一页| 国产不卡视频在线观看| 国产精品99久久精品爆乳| 壮汉紫黑粗大好深用力| 成年免费视频黄网站在线观看 | 免费在线观看成人| 4480私人午夜yy苍苍私人影院| 一区二区视频免费观看| 中文字幕第六页| 久久久精品中文字幕麻豆发布| 免费在线黄网站| 天天射天天干天天操| 年轻帅主玩奴30min视频| 无码专区永久免费AV网站| 文轩探花高冷短发| 日韩精品无码一本二本三本| 男男车车的车车网站免费| 老司机深夜福利影院| 阿v视频免费在线观看| 高清一本之道加勒比在线| 麻豆亚洲AV成人无码久久精品| 97在线公开视频| 香蕉视频在线观看www| 黄色毛片在线播放| 里番acg全彩| 老师让我她我爽了好久视频|