_exit()函数与exit()函数的区别
生活随笔
收集整理的這篇文章主要介紹了
_exit()函数与exit()函数的区别
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
exit()在結(jié)束調(diào)用它的進(jìn)程之前,要進(jìn)行如下步驟:
1.cleanup(); 2.在atexit()注冊的函數(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í)行),相對(duì)?應(yīng),后一個(gè)函數(shù)只為進(jìn)程實(shí)施內(nèi)核清除工作。? 在由‘fork()’創(chuàng)建的子進(jìn)程分支里,正常情況下使用‘exit()’是不正確的,這是?因?yàn)槭褂盟鼤?huì)導(dǎo)致標(biāo)準(zhǔn)輸入輸出(譯者注:stdio: Standard Input Output)的緩沖區(qū)被?清空兩次,而且臨時(shí)文件被出乎意料的刪除(譯者注:臨時(shí)文件由tmpfile函數(shù)創(chuàng)建?在系統(tǒng)臨時(shí)目錄下,文件名由系統(tǒng)隨機(jī)生成)。在C++程序中情況會(huì)更糟,因?yàn)殪o?態(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)樗鼘⒂绊? *父*進(jìn)程的狀態(tài)本文轉(zhuǎn)自 驛落黃昏 51CTO博客,原文鏈接:http://blog.51cto.com/yiluohuanghun/1184855,如需轉(zhuǎn)載請(qǐng)自行聯(lián)系原作者
總結(jié)
以上是生活随笔為你收集整理的_exit()函数与exit()函数的区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 读书笔记--101个shell脚本 之#
- 下一篇: Java程序员应知道的十条Java优化策