丝袜人妻一区二区三区_少妇福利无码视频_亚洲理论片在线观看_一级毛片国产A级片

當(dāng)前位置:首頁 > 娛樂

exit函數(shù) linux命令之exit分析

今天我給大家講講linux命令退出的用法和區(qū)別。榮信教育提醒大家,北京空這兩天不太好,同學(xué)們要注意呼吸道疾病的感染。好吧,我們來看看。

注意:exit()是exit。傳入的參數(shù)是程序退出時的狀態(tài)代碼。0表示正常退出,其他表示異常退出。一般用-1或1。規(guī)范C中有兩個宏,EXIT_SUCCESS和EXIT_FAILURE,使用exit(EXIT_SUCCESS)??勺x性更好。

就系統(tǒng)調(diào)用而言,_exit和exit是孿生兄弟。他們到底相似到什么程度,我們可以從Linux的源代碼中找到答案:

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

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

#i包括void _exit(int狀態(tài));

和exit相比,exit()函數(shù)是在stdlib.h中定義的,而_exit()是在unistd.h中定義的,從名字上看,stdlib.h好像比unistd.h高一點(diǎn),那么,兩者有什么區(qū)別呢?_exit()函數(shù)的作用最簡單:直接停止進(jìn)程,抹掉它使用的內(nèi)存空并破壞它在內(nèi)核中的各種數(shù)據(jù)結(jié)構(gòu);exit()函數(shù)在這些的基礎(chǔ)上做一些打包,在執(zhí)行退出之前添加幾個進(jìn)程。基于這個原因,有人認(rèn)為退出不能再被視為簡單的系統(tǒng)調(diào)用。exit()函數(shù)和_exit()函數(shù)最大的區(qū)別在于,exit()函數(shù)在調(diào)用exit系統(tǒng)之前要檢查文件打開狀態(tài),并將文件緩沖區(qū)中的內(nèi)容寫回文件,即“整理I/O緩沖區(qū)”。

退出()在完成調(diào)用它的過程之前,應(yīng)該執(zhí)行以下過程:

1.調(diào)用atexit()注冊的函數(shù)(exit函數(shù));ATEXIT注冊的所有函數(shù)在注冊時都是按相反的順序調(diào)用的,這使得我們可以指定在程序停止時執(zhí)行自己的排序動作,比如將程序狀態(tài)信息保存在文件中,解鎖共享數(shù)據(jù)庫等等。

2 . clean up();關(guān)閉所有打開的流,這將導(dǎo)致寫入所有緩沖的輸出,并刪除TMPFILE函數(shù)創(chuàng)建的所有臨時文件。

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

_exit做三件事(man): 1,任何打開的文件deors相信該進(jìn)程是關(guān)閉的2,該進(jìn)程的任何子進(jìn)程被進(jìn)程1繼承,init 3,該進(jìn)程的父進(jìn)程被發(fā)送一個sigchld信號。

Exit calls _exit在完成完成作業(yè)后停止進(jìn)程。

此外,另一種解釋:

簡而言之,exit函數(shù)停止調(diào)用過程。退出程序前,關(guān)閉所有文件,緩沖輸出內(nèi)容會重寫定義,所有重寫的“退出函數(shù)”(由atexit定義)都會被調(diào)用。

_exit:此函數(shù)由Posix定義,不會運(yùn)行退出處理程序和信號處理程序。在UNIX系統(tǒng)中,輸入輸出流不會被刷新。

簡言之,_exit停止調(diào)用進(jìn)程,但不關(guān)閉文件、擦除輸出緩存或調(diào)用exit函數(shù)。

一起:

不管進(jìn)程如何停止,內(nèi)核都會關(guān)閉進(jìn)程打開的所有文件deors,釋放進(jìn)程使用的內(nèi)存!

更詳細(xì)的介紹:

調(diào)用exit()exit()函數(shù)導(dǎo)致正常程序終止。

exit()函數(shù)執(zhí)行以下功能:

1.標(biāo)準(zhǔn)C atexit()函數(shù)注冊的所有函數(shù)都以注冊的相反順序調(diào)用。如果這些函數(shù)調(diào)用exit(),結(jié)果是不可移植的。2.所有打開的輸出流被刷新(數(shù)據(jù)被寫出),并且這些流被關(guān)閉。

3.由tmpfile()創(chuàng)建的所有文件都將被刪除。

4.調(diào)用了_exit()函數(shù)。調(diào)用_exit()函數(shù)執(zhí)行操作系統(tǒng)特定的程序終止函數(shù)。這些包括:1。所有打開的文件和目錄流都被關(guān)閉。

2.如果父進(jìn)程正在執(zhí)行wait()或waitpid(),父進(jìn)程將被喚醒,狀態(tài)變?yōu)榭捎谩?/p>

3.如果父進(jìn)程沒有執(zhí)行wait()或waitpid(),則保存狀態(tài)以便在后續(xù)的wait()或waitpid()上返回給父進(jìn)程。4.終止進(jìn)程的子進(jìn)程被分配一個新的父進(jìn)程標(biāo)識。注:父母的終止并不直接終止其子女。如果實(shí)現(xiàn)支持SIGCHLD信號,就向父級發(fā)送一個SIGCHLD。6.發(fā)送幾個作業(yè)控制信號。

為了在分叉子流程分支中使用_exit函數(shù)而不是exit函數(shù)?“exit()”和“_ exit()”之間有很多區(qū)別,尤其是“vfork()”。

“exit()”和“_exit()”的根本區(qū)別在于,前一個調(diào)用在調(diào)用庫中實(shí)現(xiàn)與用戶模式構(gòu)造相關(guān)的清理,并調(diào)用用戶定義的清理程序(自定義的清理程序由atexit函數(shù)定義,可以重復(fù)定義,也可以按相反的順序執(zhí)行)。相應(yīng)地,_ exit函數(shù)只是一個進(jìn)程。在' fork()'創(chuàng)建的子進(jìn)程分支中,正常情況下使用' exit()'是不正確的,因?yàn)閟tdio: Standard Input Output)的緩沖區(qū)被清空空兩次,臨時文件被意外刪除(臨時文件是在系統(tǒng)的臨時目錄下由tmpfile函數(shù)創(chuàng)建的,文件名是系統(tǒng)隨機(jī)取的)在C++程序中,情況會更糟,因?yàn)殪o態(tài)對象的析構(gòu)函數(shù)可以執(zhí)行錯誤。(也有一些特殊情況,比如照顧者,其父進(jìn)程需要調(diào)用' _ exit()'而不是子進(jìn)程;適用于大多數(shù)情況的基本規(guī)則是,在進(jìn)入“main”函數(shù)后,只調(diào)用一次“exit()”。在‘vfork()’創(chuàng)建的子流程分支中,‘exit()’的應(yīng)用會變得越來越有風(fēng)險(xiǎn),因?yàn)闀绊懜噶鞒痰臓顟B(tài)。

# include# include int glob = 6;/*初始化數(shù)據(jù)中的外部變量*/int main(void){ int var;/*堆棧上的自動變量*/PID _ t PID;var = 88printf("先于vfork n ";/*我們不刷新stdio */if((PID = vfork())& lt;0) printf("vfork錯誤 n ";else if(PID = = 0){/* child */glob++;/*修改父變量*/var++;退出(0);/* child terminals *///最好在子進(jìn)程中使用_exit(0)。} /* parent */ printf("pid = %d,glob = %d,var = %dn ",getpid(),glob,var);退出(0);}運(yùn)行在Linux系統(tǒng)上,父進(jìn)程printf的輸出:pid = 29650,glob = 7,var = 89

子進(jìn)程是自己關(guān)閉的。雖然它們共享規(guī)范輸入、規(guī)范輸出、規(guī)范錯誤等“打開的文件”,但是當(dāng)子進(jìn)程退出時,它只是遞減引用計(jì)數(shù),使得父進(jìn)程無法關(guān)閉,所以父進(jìn)程仍然有輸出。

但是,在其他UNIX系統(tǒng)上,父進(jìn)程可能沒有輸出。最初的原因是子進(jìn)程調(diào)用e x i t,覆蓋并關(guān)閉所有規(guī)范的I/O流,包括規(guī)范的輸出。雖然這是由子進(jìn)程執(zhí)行的,但它是在父進(jìn)程的地址空中執(zhí)行的,因此所有受影響的規(guī)范I/O FILE目標(biāo)都在父進(jìn)程中。當(dāng)父進(jìn)程調(diào)用p r i n t f時,規(guī)范輸出已經(jīng)關(guān)閉,所以p r i n t f返回-1。

在Linux的標(biāo)準(zhǔn)函數(shù)庫中,有一組函數(shù)叫做“高級I/O”,眾所周知的有printf(),fopen(),fread()和fwrite()。它們也被稱為“緩沖I/O”,它們的特點(diǎn)是內(nèi)存中有一個緩沖區(qū),對應(yīng)于每個打開的文件,這樣,下次讀取文件時,可以直接從內(nèi)存中的緩沖區(qū)讀取。每次寫文件,都是只寫到內(nèi)存中的緩沖區(qū)。在滿足一定條件(達(dá)到一定數(shù)量,或者遇到特定字符,比如換行符、文件完成符EOF)后,可以將緩沖區(qū)的內(nèi)容一次性寫入文件,大大提高了文件讀寫的速度,但也給我們的編程帶來了一點(diǎn)麻煩。如果有一些數(shù)據(jù),我們認(rèn)為已經(jīng)寫入文件,但實(shí)際上,因?yàn)椴粷M足指定條件,所以只存儲在緩沖區(qū)中。此時,我們使用_exit()函數(shù)直接關(guān)閉進(jìn)程,緩沖區(qū)中的數(shù)據(jù)將會丟失。相反,如果我們想確保數(shù)據(jù)的完整性,就必須使用exit()函數(shù)。

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

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

以下示例比較了這兩個函數(shù)之間的差異。Printf函數(shù)是一種緩沖I/O的方法,遇到“n”換行符時主動從緩沖區(qū)讀取記錄。使用此屬性比較示例。

Exit.c源代碼

# include # include int main(void){ printf("使用退出... n ");printf("這是緩沖區(qū)中的內(nèi)容");退出(0);}

輸出信息:

使用退出...

這是緩沖區(qū)中的內(nèi)容

# include # include int main(void){ printf("使用退出... n ");//如果此處沒有添加“n”,此消息可能不會出現(xiàn)在終端上。printf("這是緩沖區(qū)中的內(nèi)容");_ exit(0);}

僅輸出:

使用退出...

澄清:一個進(jìn)程調(diào)用exit后,該進(jìn)程不會立即完全消失,而是留下一個叫僵尸的數(shù)據(jù)結(jié)構(gòu)。僵尸進(jìn)程是一個非常特殊的進(jìn)程,已經(jīng)放棄了所有的內(nèi)存空,沒有可執(zhí)行代碼,無法調(diào)度。它只在流程列表中保存一個位置,記錄流程的退出狀態(tài)和其他信息,供其他流程收集。況且僵尸進(jìn)程不再占用任何內(nèi)存空。

# include

int main() { printf("%c ",' c ');_ exit(0);}文章來自榮信教育官網(wǎng):www.vfast.com.cn歡迎訪問,需要注明出處

1.《exit函數(shù) linux命令之exit分析》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點(diǎn),與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。

2.《exit函數(shù) linux命令之exit分析》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實(shí),對其原創(chuàng)性、真實(shí)性、完整性、及時性不作任何保證。

3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/yule/795566.html

上一篇

香港姐妹 1989年李嘉誠花3000萬,帶18歲李嘉欣回家,兩小時后原配突然暴斃

下一篇

蘭因絮果的意思 如懿傳蘭因絮果是什么意思 如懿乾隆最終離散最傷人心

怎么打開rar格式的文件 無需解壓如何查看一個歸檔或壓縮文件的內(nèi)容

怎么打開rar格式的文件 無需解壓如何查看一個歸檔或壓縮文件的內(nèi)容

在本教程中,我們將學(xué)習(xí)如何在類似Unix的系統(tǒng)中查看歸檔文件或壓縮文件的內(nèi)容,而無需實(shí)際解壓縮。在進(jìn)一步討論之前,讓我們先澄清一下歸檔文件和壓縮文件的概念,這兩者之間有著顯著的不同。歸檔是將多個文件或目錄合并成一個文件的過程,因此生成的文件不會被壓縮。壓縮是一種將多...

bt在線 粉絲福利 | 在線觀看BT文件和磁力鏈接視頻攻略

最近,對互聯(lián)網(wǎng)上資源共享的限制越來越嚴(yán)格。曾經(jīng)的劇迷和電影迷的曙光百度云,現(xiàn)在推出了“自動限制分享功能”。以前只是自動屏蔽,幾個小時就能獲得資源。現(xiàn)在...想這么殘忍,就要感嘆科技發(fā)達(dá)。 以前是我編檔補(bǔ)哭主,現(xiàn)在沒機(jī)會哭了。結(jié)果衍生出了BT文件和磁性鏈接,但是大家都...

apk簽名 Android之a(chǎn)pk文件簽名——keytool 和 jarsigner

  • apk簽名 Android之a(chǎn)pk文件簽名——keytool 和 jarsigner
  • apk簽名 Android之a(chǎn)pk文件簽名——keytool 和 jarsigner
  • apk簽名 Android之a(chǎn)pk文件簽名——keytool 和 jarsigner

中央教育 2019中央文件進(jìn)一步明確了中國教育發(fā)展方向

近日,中共中央、國務(wù)院發(fā)布了《中國教育現(xiàn)代化2035》,并發(fā)出通知,要求各地區(qū)、各部門結(jié)合實(shí)際情況認(rèn)真貫徹執(zhí)行。 《中國教育現(xiàn)代化2035》分為五個部分:一、戰(zhàn)略背景;二、大意;第三,戰(zhàn)略任務(wù);四、實(shí)施路徑;五、保障措施。 《中國教育現(xiàn)代化2035》提出了推進(jìn)教育現(xiàn)...

電腦版微信聊天記錄在哪個文件夾 微信電腦版聊天記錄在哪 微信電腦版文件在哪

  • 電腦版微信聊天記錄在哪個文件夾 微信電腦版聊天記錄在哪 微信電腦版文件在哪
  • 電腦版微信聊天記錄在哪個文件夾 微信電腦版聊天記錄在哪 微信電腦版文件在哪
  • 電腦版微信聊天記錄在哪個文件夾 微信電腦版聊天記錄在哪 微信電腦版文件在哪

u盤格式轉(zhuǎn)換工具 教你無損轉(zhuǎn)換U盤格式,保證文件不丟失!

  • u盤格式轉(zhuǎn)換工具 教你無損轉(zhuǎn)換U盤格式,保證文件不丟失!
  • u盤格式轉(zhuǎn)換工具 教你無損轉(zhuǎn)換U盤格式,保證文件不丟失!
  • u盤格式轉(zhuǎn)換工具 教你無損轉(zhuǎn)換U盤格式,保證文件不丟失!

sd卡分區(qū)后怎么恢復(fù) 格式化內(nèi)存卡后,內(nèi)存卡內(nèi)的文件可以恢復(fù)嗎?

  • sd卡分區(qū)后怎么恢復(fù) 格式化內(nèi)存卡后,內(nèi)存卡內(nèi)的文件可以恢復(fù)嗎?
  • sd卡分區(qū)后怎么恢復(fù) 格式化內(nèi)存卡后,內(nèi)存卡內(nèi)的文件可以恢復(fù)嗎?
  • sd卡分區(qū)后怎么恢復(fù) 格式化內(nèi)存卡后,內(nèi)存卡內(nèi)的文件可以恢復(fù)嗎?
文件柜鎖 密碼文件柜鑰匙丟了鎖怎么開?

文件柜鎖 密碼文件柜鑰匙丟了鎖怎么開?

密碼鎖文件柜一般是企業(yè)用來存放一些需要長期保存的重要文件的數(shù)據(jù)存儲柜。這種文件柜的鑰匙一旦丟失,后果會非常嚴(yán)重。今天,邊肖為您帶來了幾種打開密碼文件柜的方法,但在此之前,我們必須首先確保文件柜是我們自己的,打開后沒有法律責(zé)任,然后我們可以大膽地打開它們,前提是鎖沒有...