程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> _exit()函數與exit()函數的區別

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

編輯:關於C語言

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved