婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Linux系統(tǒng)命令中exit與exit的區(qū)別

Linux系統(tǒng)命令中exit與exit的區(qū)別

熱門標(biāo)簽:宿松百度地圖標(biāo)注 南京電銷外呼系統(tǒng)廠家 信陽智能外呼系統(tǒng)聯(lián)系方式 地圖標(biāo)注和視頻彩鈴制作生意 合力億捷外呼系統(tǒng)如何解壓安裝 營業(yè)廳外呼系統(tǒng)有錄音嗎 地圖標(biāo)注怎么兼職 南通電銷外呼系統(tǒng)排名 滁州外呼系統(tǒng)接口對接

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

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

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

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

#i ncludeunistd.h> void _exit(int status);

和exit比較一下,exit()函數(shù)定義在stdlib.h中,而_exit()定義在unistd.h中,從名字上看,stdlib.h似乎比 unistd.h高級一點(diǎn),那么,它們之間到底有什么區(qū)別呢? _exit()函數(shù)的作用最為簡單:直接使進(jìn)程停止運(yùn)行,清除其使用的內(nèi)存空間,并銷毀其在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);exit() 函數(shù)則在這些基礎(chǔ)上作了一些包裝,在執(zhí)行退出之前加了若干道工序,也是因?yàn)檫@個(gè)原因,有些人認(rèn)為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)用它的進(jìn)程之前,要進(jìn)行如下步驟:

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

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

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

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

exit執(zhí)行完清理工作后就調(diào)用_exit來終止進(jìn)程。

此外,另外一種解釋:

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

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

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

共同:

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

更詳細(xì)的介紹:

Calling exit() The exit() function causes normal program termination.

The exit() function performs the following functions:

 1. All functions registered by the Standard C atexit() function are called in the reverse order of registration. If any of these functions calls exit(), the results are not portable. 2. All open output streams are flushed (data written out) and the streams are closed.

3. All files created by tmpfile() are deleted.

4. The _exit() function is called. Calling _exit() The _exit() function performs operating system-specific program termination functions. These include: 1. All open file descriptors and directory streams are closed.

 2. If the parent process is executing a wait() or waitpid(), the parent wakes up and status is made available.

3. If the parent is not executing a wait() or waitpid(), the status is saved for return to the parent on a subsequent wait() or waitpid(). 4. Children of the terminated process are assigned a new parent process ID. Note: the termination of a parent does not directly terminate its children. 5. If the implementation supports the SIGCHLD signal, a SIGCHLD is sent to the parent. 6. Several job control signals are sent.

為何在一個(gè)fork的子進(jìn)程分支中使用_exit函數(shù)而不使用exit函數(shù)? ‘exit()’‘_exit()’有不少區(qū)別在使用‘fork()’,特別是‘vfork()’時(shí)變得很 突出。

‘exit()’‘_exit()’的基本區(qū)別在于前一個(gè)調(diào)用實(shí)施與調(diào)用庫里用戶狀態(tài)結(jié)構(gòu)(user-mode constructs)有關(guān)的清除工作(clean-up),而且調(diào)用用戶自定義的清除程序 (自定義清除程序由atexit函數(shù)定義,可定義多次,并以倒序執(zhí)行),相對應(yīng),_exit函數(shù)只為進(jìn)程實(shí)施內(nèi)核清除工作。 在由‘fork()’創(chuàng)建的子進(jìn)程分支里,正常情況下使用‘exit()’是不正確的,這是 因?yàn)槭褂盟鼤?dǎo)致標(biāo)準(zhǔn)輸入輸出(stdio: Standard Input Output)緩沖區(qū)被清空兩次,而且臨時(shí)文件被出乎意料的刪除(臨時(shí)文件由tmpfile函數(shù)創(chuàng)建在系統(tǒng)臨時(shí)目錄下,文件名由系統(tǒng)隨機(jī)生成)。在C++程序中情況會更糟,因?yàn)?/span>靜態(tài)目標(biāo)(static objects)的析構(gòu)函數(shù)(destructors)可以被錯(cuò)誤地執(zhí)行。(還有一些特殊情況,比如守護(hù)程序,它們的父進(jìn)程需要調(diào)用‘_exit()’而不是子進(jìn)程;適用于絕大多數(shù)情況的基本規(guī)則是,‘exit()’在每一次進(jìn)入main’函數(shù)后只調(diào)用一次。) 在由‘vfork()’創(chuàng)建的子進(jìn)程分支里,‘exit()’的使用將更加危險(xiǎn),因?yàn)樗鼘⒂绊懜高M(jìn)程的狀態(tài)。

#include sys/types.h>; #include stdio.h> int glob = 6; /* external variable in initialized data */ int main(void) { int var; /* automatic variable on the stack */ pid_t pid; var = 88; printf("before vfork\n"; /* we don‘t flush stdio */ if ( (pid = vfork())  0) printf("vfork error\n"; else if (pid == 0) { /* child */ glob++; /* modify parent‘s variables */ var++; exit(0); /* child terminates */ //子進(jìn)程中最好還是用_exit(0)比較安全。 } /* parent */ printf("pid = %d, glob = %d, var = %d\n", getpid(), glob, var); exit(0); } 在Linux系統(tǒng)上運(yùn)行,父進(jìn)程printf的內(nèi)容輸出:pid = 29650, glob = 7, var = 89

子進(jìn)程 關(guān)閉的是自己的, 雖然他們共享標(biāo)準(zhǔn)輸入、標(biāo)準(zhǔn)輸出、標(biāo)準(zhǔn)出錯(cuò)等 打開的文件, 子進(jìn)程exit時(shí),也不過是遞減一個(gè)引用計(jì)數(shù),不可能關(guān)閉父進(jìn)程的,所以父進(jìn)程還是有輸出的。

但在其它UNIX系統(tǒng)上,父進(jìn)程可能沒有輸出,原 因是子進(jìn)程調(diào)用了e x i t,它刷新關(guān)閉了所有標(biāo)準(zhǔn)I / O流,這包括標(biāo)準(zhǔn)輸出。雖然這是由子進(jìn)程執(zhí)行的,但卻是在父進(jìn)程的地址空間中進(jìn)行的,所以所有受到影響的標(biāo)準(zhǔn)I/O FILE對象都是在父進(jìn)程中的。當(dāng)父進(jìn)程調(diào)用p r i n t f時(shí),標(biāo)準(zhǔn)輸出已被關(guān)閉了,于是p r i n t f返回- 1

Linux的標(biāo)準(zhǔn)函數(shù)庫中,有一套稱作"高級I/O"的函數(shù),我們熟知的printf()fopen()fread()fwrite()都在此 列,它們也被稱作"緩沖I/Obuffered I/O"其特征是對應(yīng)每一個(gè)打開的文件,在內(nèi)存中都有一片緩沖區(qū),每次讀文件時(shí),會多讀出若干條記錄,這樣下次讀文件時(shí)就可以直接從內(nèi)存的緩沖區(qū)中讀取,每次寫文件的時(shí)候,也僅僅是寫入內(nèi)存中的緩沖區(qū),等滿足了一定的條件(達(dá)到一定數(shù)量,或遇到特定字符,如換行符和文件結(jié)束符EOF), 再將緩沖區(qū)中的 內(nèi)容一次性寫入文件,這樣就大大增加了文件讀寫的速度,但也為我們編程帶來了一點(diǎn)點(diǎn)麻煩。如果有一些數(shù)據(jù),我們認(rèn)為已經(jīng)寫入了文件,實(shí)際上因?yàn)闆]有滿足特 定的條件,它們還只是保存在緩沖區(qū)內(nèi),這時(shí)我們用_exit()函數(shù)直接將進(jìn)程關(guān)閉,緩沖區(qū)中的數(shù)據(jù)就會丟失,反之,如果想保證數(shù)據(jù)的完整性,就一定要使用exit()函數(shù)。

Exit的函數(shù)聲明在stdlib.h頭文件中。

_exit的函數(shù)聲明在unistd.h頭文件當(dāng)中。

下面的實(shí)例比較了這兩個(gè)函數(shù)的區(qū)別。printf函數(shù)就是使用緩沖I/O的方式,該函數(shù)在遇到“\n”換行符時(shí)自動的從緩沖區(qū)中將記錄讀出。實(shí)例就是利用這個(gè)性質(zhì)進(jìn)行比較的。

exit.c源碼

#include stdlib.h> #include stdio.h> int main(void) { printf("Using exit...\n"); printf("This is the content in buffer"); exit(0); }

輸出信息:

Using exit...

This is the content in buffer

#include unistd.h> #include stdio.h> int main(void) { printf("Using exit...\n"); //如果此處不加“\n”的話,這條信息有可能也不會顯示在終端上。 printf("This is the content in buffer"); _exit(0); }

則只輸出:

Using exit...

說明:在一個(gè)進(jìn)程調(diào)用了exit之后,該進(jìn)程并不會馬上完全消失,而是留下一個(gè)稱為僵尸進(jìn)程(Zombie)的數(shù)據(jù)結(jié)構(gòu)。僵尸進(jìn)程是一種非常特殊的進(jìn)程,它幾乎已經(jīng)放棄了所有的內(nèi)存空間,沒有任何可執(zhí)行代碼,也不能被調(diào)度,僅僅在進(jìn)程列表中保留一個(gè)位置,記載該進(jìn)程的退出狀態(tài)等信息供其它進(jìn)程收集,除此之外,僵尸進(jìn)程不再占有任何內(nèi)存空間。

#include stdio.h>;

int main() { printf("%c", ‘c‘); _exit(0); }

標(biāo)簽:衢州 新余 保定 運(yùn)城 潛江 山南 麗水 銅陵

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Linux系統(tǒng)命令中exit與exit的區(qū)別》,本文關(guān)鍵詞  Linux,系統(tǒng),命令,中,exit,與,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Linux系統(tǒng)命令中exit與exit的區(qū)別》相關(guān)的同類信息!
  • 本頁收集關(guān)于Linux系統(tǒng)命令中exit與exit的區(qū)別的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    国产午夜精品一区二区| 国产欧美日韩另类一区| 欧美精品自拍偷拍动漫精品| 精品91自产拍在线观看一区| 亚洲人成网站在线| 免费观看久久久4p| 欧美影院一区二区| 国产精品少妇自拍| 美女在线视频一区| 欧美高清精品3d| 亚洲自拍偷拍av| 欧美日韩久久一区| 亚洲午夜三级在线| 欧美日韩高清一区二区不卡| 亚洲妇女屁股眼交7| 欧美综合一区二区三区| 香蕉成人伊视频在线观看| 在线一区二区视频| 亚洲一区二区3| 欧美日韩免费观看一区二区三区| 一区二区三区精品视频| 色哟哟国产精品| 日本最新不卡在线| 久久久久久亚洲综合影院红桃 | 7777精品伊人久久久大香线蕉完整版| 亚洲美女视频在线| 欧美日韩aaaaaa| 国产精品自拍三区| 亚洲婷婷综合色高清在线| 在线观看日韩一区| 久久激情五月激情| 亚洲精品亚洲人成人网在线播放| 91久久国产综合久久| 美腿丝袜亚洲色图| 日韩美女啊v在线免费观看| 日韩网站在线看片你懂的| 大胆亚洲人体视频| 久久狠狠亚洲综合| 亚洲高清中文字幕| 中文字幕av一区二区三区免费看| 欧美美女喷水视频| 91欧美一区二区| 国产一区二区三区精品视频| 亚洲嫩草精品久久| 欧美国产在线观看| 欧美精品一区二区三| 欧美一区二区三区性视频| 色狠狠av一区二区三区| 东方aⅴ免费观看久久av| 美女任你摸久久| 久久久久久久久久久久久久久99| 成人动漫中文字幕| 日韩成人av影视| 国产亚洲一二三区| 国产99久久久久| 美美哒免费高清在线观看视频一区二区 | 免费不卡在线观看| 亚洲成人av福利| 亚洲成人免费av| 亚洲一区二区av电影| 亚洲一级电影视频| 日韩精品三区四区| 久久国产免费看| 美女www一区二区| 日产国产欧美视频一区精品| 亚洲一区视频在线观看视频| 午夜一区二区三区视频| 日韩国产在线一| 久99久精品视频免费观看| 成人免费视频caoporn| av网站一区二区三区| 92国产精品观看| 正在播放亚洲一区| 久久精品亚洲精品国产欧美kt∨| 亚洲欧洲www| 亚洲国产三级在线| 国产在线精品一区二区三区不卡 | 91福利视频在线| 日韩欧美电影一区| 亚洲视频综合在线| 捆绑紧缚一区二区三区视频| 国产在线观看一区二区| 色婷婷综合激情| 欧美日韩电影在线播放| 欧美一卡二卡在线| 5月丁香婷婷综合| 久久久www成人免费毛片麻豆| 亚洲大尺度视频在线观看| 91免费在线播放| 久久久久久久久久久99999| 亚洲风情在线资源站| 不卡av免费在线观看| 国产欧美日韩麻豆91| 激情都市一区二区| 久久综合九色综合欧美就去吻| 亚洲福利视频一区二区| 91免费观看在线| 亚洲欧洲av在线| 97精品久久久午夜一区二区三区 | 欧美日韩中文字幕一区| 精品日本一线二线三线不卡| 亚洲va天堂va国产va久| 欧美日高清视频| 国产一区二区三区国产| 欧美日本一区二区| 中文字幕一区二区不卡| 国产综合成人久久大片91| 久久免费精品国产久精品久久久久| 亚洲麻豆国产自偷在线| 欧美午夜一区二区三区免费大片| 中文字幕+乱码+中文字幕一区| 国产一区二区三区日韩| 久久久99久久| 色乱码一区二区三区88| 久久精品在这里| 91网页版在线| 亚洲国产精品人人做人人爽| 欧美在线视频你懂得| 亚洲一区二区精品视频| 欧洲日韩一区二区三区| 韩国精品久久久| 久久久精品国产免费观看同学| 丝袜美腿亚洲综合| 国产女人aaa级久久久级| eeuss鲁一区二区三区| 亚洲成人免费电影| 欧美日韩国产首页在线观看| 国产91对白在线观看九色| 一区二区三区不卡视频| 久久久综合九色合综国产精品| 91丨porny丨蝌蚪视频| 日韩av在线播放中文字幕| 伊人夜夜躁av伊人久久| 欧美欧美欧美欧美| www.欧美亚洲| 日韩综合小视频| 亚洲精品中文在线影院| 国产日本欧美一区二区| 欧美成人艳星乳罩| 日韩一区二区三区电影| 精品国产区一区| 欧美乱熟臀69xxxxxx| 91蜜桃网址入口| av亚洲精华国产精华精华| 不卡一区二区中文字幕| 国产精品18久久久久久vr| 国产精品一区二区在线观看不卡 | 欧美制服丝袜第一页| 97久久久精品综合88久久| 91国内精品野花午夜精品| 色天使色偷偷av一区二区| 91福利视频在线| 欧美在线不卡视频| 欧美日本在线视频| 欧美一区二区三区在线观看视频| 久久精品一区四区| 国产精品全国免费观看高清| 国产欧美日韩激情| 亚洲综合免费观看高清完整版 | 日韩一级在线观看| 26uuu国产日韩综合| 亚洲男人天堂av| 国产精品福利一区| 亚洲最新视频在线播放| 久久国产精品一区二区| 91免费观看国产| 欧美日韩黄色影视| 日本一区二区高清| 日韩av一区二| 91蝌蚪porny| 久久久精品免费观看| 亚洲黄色片在线观看| 狠狠色综合播放一区二区| 色综合中文字幕国产 | 色中色一区二区| 91麻豆精品一区二区三区| 精品成人a区在线观看| 亚洲狠狠爱一区二区三区| 韩国视频一区二区| 欧美久久一区二区| 亚洲在线中文字幕| 亚洲综合成人在线| 久久99深爱久久99精品| 国产成人免费视频 | 亚洲 欧美综合在线网络| 色婷婷香蕉在线一区二区| 国产午夜精品一区二区三区视频| 国产精品综合一区二区| 久久综合久久鬼色中文字| 风间由美一区二区三区在线观看| 久久精品日产第一区二区三区高清版| 国产成人亚洲综合色影视| 亚洲人成网站在线| www国产精品av| 制服视频三区第一页精品| 成人综合婷婷国产精品久久免费| 一区二区三区av电影| 国产精品麻豆99久久久久久| 5月丁香婷婷综合| 欧美日韩免费视频|