Pthread Linux程序終止過程

2021-04-20 01:30:34 字數 728 閱讀 1748

程序終止過程:

程序終止的系統呼叫sys_exit()通過函式do_exit()實現。do_exit()呼叫

static inline void __exit_mm(struct task_struct * tsk)

釋放一部分資源。

然後呼叫

static void exit_notify(void)

通知父程序和子程序,讓init接管所有的子程序。然後程序進入zombie狀態。

程序在zombie狀態時,核心仍然儲存一些它的資訊以便父程序會需要它 - 比如,父程序可能需要檢查子程序的退出狀態。這也是zombie態存在的原因。為了得到這些資訊,父程序呼叫

asmlinkage long sys_wait4(pid_t pid,unsigned int * stat_addr, int options, struct rusage * ru)

並釋放剩下的程序資源。

當子程序在其父程序之前exit,而父程序又沒有使用wait,子程序進入zombie態,並且會一直保持除非系統重啟。這樣子程序始終佔著資源,並且減少了系統的最大程序數。

如果乙個程序要fork乙個子程序,但不要求它等待子程序終止,也不希望子程序處於僵死狀態直到父程序終止

解決辦法有兩個:

一些unix使用了新的flag來指明程序不等待其子程序結束。當子程序結束時不建立zombie態。

還有就時呼叫fork()兩次。

pthread 06/12/31

程序的始與終

include linux sched.h struct task struct引數標誌 含義clone files 父子程序共享開啟的檔案 clone fs 父子程序共享檔案系統資訊 clone sighand 父子程序共享訊號處理函式及被阻斷的訊號 clone vm 父子程序共享位址空間 clo...

啟動mysql服務,報錯1067,程序意外終止

之前一直使用的是oracle,這次換成mysql,在配置my.ini的時候,新增default character set utf8,來修改字符集。修改完成之後,啟動mysql的服務,但是報錯,1067,程序意外終止。開啟安裝目錄下的data資料夾,看pc.err日誌,發現錯誤 unknown va...

2023年終盤點 終章篇

這期間公司進行了總結 述職 面談等一系列年終流程,去年的篇章終於將翻過去了,這篇的總結是將是2010的終章。2010年仍然是波瀾不驚,做的事情仍然是默默無聞,但經過一系列的總結,發現之前辛勤而默默的耕耘都是量的積累。初中就學 量變必然引起質變 確實,現在慢慢開始顯出質的變化了。思維能力。簡單地說就是...