『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』函式後只呼叫一次。)
使用fork迴圈建立子程序
假設父程序為 陽澄湖大龍蝦 那麼我接下來就建立5個子程序,分別為 皮皮蝦1號 皮皮蝦2號 皮皮蝦3號 皮皮蝦4號 皮皮蝦5號 陽澄湖大龍蝦這個主程序生了這麼多個兒子以後,有點累,需要休息一下 author kunshanpipixia include include include include ...
fork 子程序不繼承父程序開啟的檔案描述符
昨天面試被問到了這個問題,沒有回答上來,網上找了一下答案。解決方法是使用clone系統呼叫使用引數在複製時將父程序資源有選擇地複製給子程序。下面介紹forkvforkclone三者的區別 vfork系統呼叫不同於fork,用vfork建立的子程序與父程序共享位址空間,也就是說子程序完全執行在父程序的...
gdb 子程序 多程序 fork 除錯
標 題 faq 請問如何用gdb除錯子程序 發信站 bbs 水木清華站 mon may 19 18 17 02 2003 轉信 作個faq,在常見的x86平台上如何gdb除錯fork或者exec出來的子程序 1.在fork語句上設定斷點,修改fork返回的值。這種做法並沒有真正去 觸動已經存在的子程...