_exit()函數與exit()函數的區別

來源:互聯網
上載者:User

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

1.cleanup();

2.在atexit()註冊的函數;

‘exit()’與‘_exit()’有不少區別在使用‘fork()’,特別是‘vfork()’時變得很 突出。

‘exit()’與‘_exit()’的基本區別在於前一個調用實施與調用庫裡使用者狀態結構 (user-mode constructs)有關的清除工作(clean-up),而且調用使用者自訂的清除程式 (譯者註:自訂清除程式由atexit函數定義,可定義多次,並以倒序執行),相對 應,後一個函數只為進程實施核心清除工作。

在由‘fork()’建立的子進程分支裡,正常情況下使用‘exit()’是不正確的,這是 因為使用它會導致標準輸入輸出(譯者註:stdio: Standard Input Output)的緩衝區被 清空兩次,而且臨時檔案被出乎意料的刪除(譯者註:臨時檔案由tmpfile函數建立 在系統臨時目錄下,檔案名稱由系統隨機產生)。在C++程式中情況會更糟,因為靜 態目標(static objects)的解構函式(destructors)可以被錯誤地執行。(還有一些特殊情 況,比如精靈,它們的*父進程*需要調用‘_exit()’而不是子進程;適用於絕 大多數情況的基本規則是,‘exit()’在每一次進入‘main’函數後只調用一次。)

在由‘vfork()’建立的子進程分支裡,‘exit()’的使用將更加危險,因為它將影響

*父*進程的狀態

本文出自 “驛落黃昏” 部落格,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/1184855

相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。