Linux 進程總結(jié)
點擊上方“杰哥的IT之旅”,選擇“星標”公眾號重磅干貨,第一時間送達
作 者:For_zwb
鏈 接:https://blog.csdn.net/weixin_42250655/article/details/81567643
進程
進程,是計算機中的程序關(guān)于某數(shù)據(jù)集合上的一次運行活動,是系統(tǒng)進行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。它的執(zhí)行需要系統(tǒng)分配資源創(chuàng)建實體之后,才能進行。舉個例子:我們所寫的程序,在運行的時候它也是一個進程。
進程和程序的區(qū)別:
程序相當于是一個文件,是有序代碼的集合,是靜態(tài)的存儲在硬盤中。而進程是運行中的程序,系統(tǒng)會為變量分配相應(yīng)的內(nèi)存和初始化它們的值,還有一些資源如:堆、棧等當程序運行完進程也就結(jié)束了,但程序還是保存在硬盤中沒有消失。
進程的特性
并發(fā)性:可以與其它進程在宏觀上同時向前推進。
動態(tài)性:進程是執(zhí)行中的程序,動態(tài)產(chǎn)生、動態(tài)消亡、動態(tài)變化。
獨立性:進程是系統(tǒng)資源分配的基本單位。
交往性:與其它進程可以進行交互。
異步性:不統(tǒng)一推進。
結(jié)構(gòu)性:每個進程有一個控制塊PCB。
并行性:只有在多CPU多處理器的計算機上,進程才能并行執(zhí)行。
一個進程中如何創(chuàng)建多個進程
創(chuàng)建進程有兩種方式:一種是操作系統(tǒng)創(chuàng)建,另一種是父進程創(chuàng)建。父進程創(chuàng)建的進程(通常稱為子進程),它們和父進程存在隸屬關(guān)系。子進程又可以創(chuàng)建進程,這樣形成一個進程家族。子進程可以繼承其父進程幾乎所有的資源。

孤兒進程
孤兒字面意思就是沒有父母的孩子,那孤兒進程的意思就是沒有父進程的進程。這種情況是怎么發(fā)生的呢?就是父進程先于子進程結(jié)束,這時子進程被init進程收養(yǎng),init的進程號為1。
僵尸進程
當一個子進程終止時,如果它的父進程還在運行,內(nèi)核會為這個終止的子進程保留一定量的信息。父進程可以根據(jù)這些信息知道子進程的情況。直到父進程對其進行了善后處理,子進程才會完全終止。在這期間,父進程沒有回收子進程并釋放子進程占用的資源,這個子進程會成為僵尸進程,它仍然占用一定資源。
進程終止
從main函數(shù)返回 return()。
調(diào)用 exit()。
調(diào)用 _exit()或 _Exit()。
最后一個線程從其啟動例程返回。
最后一個線程調(diào)用 pthread_exit()。
調(diào)用 abort()它產(chǎn)生 SIGABRT 信號。
收到一個信號并終止。
最后一個線程對取消請求作出相應(yīng)。
進程組
每個進程都屬于某個進程組。進程組是一個或多個進程的集合。通常它們與同一作業(yè)相關(guān)聯(lián),可以接收來自同一終端的各種信號。每個進程組有一個唯一的進程組ID。每個進程組都有一個組長進程,進程ID等于進程組ID的進程就是組長進程。

會話
會話(session)是一個或多個進程組的集合。
競態(tài)條件
當多個進程都企圖對共享數(shù)據(jù)進行某種處理時,而最后的結(jié)果又取決于進程運行的順序時,我們認為發(fā)生了競態(tài)條件(race condition)。如果fork之后的某種邏輯顯式或隱式地依賴于在fork之后是父進程先運行還是子進程先運行,那么fork函數(shù)就會是競爭條件活躍的滋生地。通常,我們都是不可以預(yù)估子進程和父進程哪個先運行。因為進程的運行順序完全取決于內(nèi)核的調(diào)度算法和系統(tǒng)的負載。
我們可以調(diào)用wait或者waitpid函數(shù)來讓父進程等待子進程運行完之后在運行,這樣父進程就會被阻塞住,直到子進程運行完畢之后才能運行,其實這樣做的效率就比較低,我們fork就是希望多進程并發(fā)的執(zhí)行,如果采用此方法,則fork也就失去了很大的意義。
為了避免競爭條件和不采用wait或waitpid方法,我們可以在多進程之間采用發(fā)送和接收信號的處理方法來避免競態(tài)條件。或者各種進程間的通信方式(IPC)也可以使用。
本公眾號全部博文已整理成一個目錄,請在公眾號后臺回復(fù)「
m」獲取!推薦閱讀:Redis 使用的 10 個小技巧!
支付寶的架構(gòu)到底有多牛逼?
一文看懂:網(wǎng)址,URL,域名,IP地址,DNS,域名解析
如何解決代碼中 if…else 過多的問題?
面試資源、公共API、多樣化學(xué)習路徑,這10個GitHub庫開發(fā)者必看!
Windows支持直接訪問Linux子系統(tǒng)文件:你的下一臺Linux何必是Linux
關(guān)注微信公眾號『杰哥的IT之旅』,后臺回復(fù)“1024”查看更多內(nèi)容,回復(fù)“微信”添加我微信。
