關於main函式與程序 執行緒退出的關係

2021-10-07 18:35:45 字數 685 閱讀 3453

在學習嵌入式系統的程序和執行緒時,有以下的疑問:

講師說程序退出時,程序中的所有執行緒都會退出;但是主線程退出時,子執行緒是不會退出的。當時覺得主線程=主程序main函式,那主線程退出了,子執行緒還會繼續執行呢?

在網上查閱資料之後,弄明白了三者的關係就理解了開頭的兩句話,下面寫一下總結,方便以後複習。

理解程序與執行緒

程序 是系統分配資源的最小單位。

執行緒 是系統排程的最小單位。

執行緒是程式最基本的執行單位,而程序是不能執行的,執行的是程序中的執行緒。建立程序時,系統會自動建立乙個主線程來執行程序中的資料資訊。

我們執行main函式的時候,就會建立乙個主程序和乙個主線程,當我們在主線程中建立更多的子執行緒後:

呼叫exit()函式:主程序和主線程都退出,子執行緒自然也要退出。

呼叫pthread_exit()函式:主線程退出,但是主程序依舊存在,所以程序中的子執行緒可以繼續執行。

在程式中使用多程序多執行緒時,曾經出現ctrl c強制退出程式後,仍然有執行緒在後台執行,要手動kill掉。是因為父程序死亡後,主程序中的執行緒跟隨主程序一起退出了,而子程序由系統1號程序進行管理,所以子程序中的執行緒還可以繼續執行。這就導致我在除錯執行程式的時候經常會出現報錯,原因是因為後台中的子程序還在執行導致的。所以在處理程序和執行緒時,要幾時對執行緒和程序資源進行**,避免出錯。

程序等待與退出

程序等待就是等待子程序的狀態改變,獲取子程序的退出狀態碼,允許系統釋放子程序的所有資源,這時候子程序在所有資源才會被釋放掉。程序等待是避免產生殭屍程序的主要方式 程序等待的方式 1.pid t wait int status status 用於獲取子程序 退出狀態碼 返回值是返回退出的子程序pid ...

關於main函式的引數

歷史上大多數unix系統支援main函式帶有三個引數 int main int argc,char argv,char env extern char environ 因為iso c規定main函式只有兩個引數,所以posix.1也規定應使用environ而不使用第三個引數。下面的例子展示了main...

C 關於程序與執行緒 三

一 建立多執行緒應用程式 執行緒,也被稱為輕量程序,指執行中程式的排程單位。目前大部分平台都支援多執行緒,允許程式中存在多個執行緒。在windows作業系統的任務管理器中就可以檢視執行緒,把選擇列對話方塊的執行緒計數選上即能顯示每個程序的執行緒數。在本節的例項中,建立了乙個最簡單的多執行緒應用程式。...