進(jìn)程管理

主要內(nèi)容:
  • 進(jìn)程概念
  • 進(jìn)程生命周期
  • 進(jìn)程的創(chuàng)建
  • 命名空間機(jī)制
1、進(jìn)程概念

????進(jìn)程也即是在機(jī)器中運(yùn)行的程序,在系統(tǒng)中資源分配是以進(jìn)程為單位進(jìn)行分配。在Linux內(nèi)核中進(jìn)程是用task_struct結(jié)構(gòu)體來(lái)表示的,他可以分為實(shí)時(shí)進(jìn)程和非實(shí)時(shí)進(jìn)程。

  • 實(shí)時(shí)進(jìn)程:它必須在可保證的時(shí)間范圍內(nèi)得到處理。這類進(jìn)程他的實(shí)時(shí)性要求比較高,低延遲。
  • 非實(shí)時(shí)進(jìn)程:大多數(shù)進(jìn)程的運(yùn)行沒有時(shí)間約束的普通進(jìn)程,但是還是會(huì)根據(jù)重要性來(lái)分配優(yōu)先級(jí)。
2、進(jìn)程生命周期

????在Linux中進(jìn)程的狀態(tài)主要有運(yùn)行、等待和睡眠三種狀態(tài),進(jìn)程在這3種狀態(tài)中切換過程就構(gòu)成了進(jìn)程的生命周期。

  • 運(yùn)行:進(jìn)程獲得了cpu時(shí)間片,此刻在cpu中執(zhí)行。
  • 等待:進(jìn)程所需資源都已獲得分配,獲得了運(yùn)行前的所有資源,等待分配cpu時(shí)間片執(zhí)行,此刻進(jìn)程是在就緒隊(duì)列中排隊(duì),等待調(diào)度器的調(diào)度執(zhí)行。
  • 睡眠:進(jìn)程在等待外部事件,調(diào)度器無(wú)法在下一次任務(wù)切換時(shí)選擇調(diào)度該進(jìn)程。
    ????在Linux中的task_struct結(jié)構(gòu)中的state字段用來(lái)表示當(dāng)前進(jìn)程的狀態(tài):
  • TASK_RUNNING:表示進(jìn)程處于可運(yùn)行狀態(tài)。
  • TASK_INTERRUPTIBLE:表示進(jìn)程等待外部事件或其他資源的睡眠狀態(tài)
  • TASK_UNINTERRUPTIBLE:表示因內(nèi)核而停用的睡眠進(jìn)程,他不能由外部信號(hào)喚醒,必須由內(nèi)核喚醒。
  • EXIT_ZOMBIE:表示僵尸狀態(tài)
  • EXIT_DEAD:wait系統(tǒng)調(diào)用已發(fā)出,當(dāng)前進(jìn)程完全從系統(tǒng)移除之前的狀態(tài)。


    linux進(jìn)程生命周期.png

    ????僵尸進(jìn)程:資源都已經(jīng)釋放,但進(jìn)程表中仍然有表項(xiàng),ps命令依然能查到對(duì)應(yīng)的進(jìn)程信息。進(jìn)程銷毀必須滿足兩個(gè)條件,其一,程序必須由另一個(gè)進(jìn)程或用戶殺死,其二,進(jìn)程的父進(jìn)程在子進(jìn)程終止時(shí)必須調(diào)用wait4系統(tǒng)調(diào)用,這相當(dāng)于向內(nèi)核證實(shí)父進(jìn)程已經(jīng)確認(rèn)子進(jìn)程的終結(jié)。該系統(tǒng)調(diào)用使得內(nèi)核可以釋放為子進(jìn)程保留的資源。僵尸進(jìn)程就是在第一個(gè)條件發(fā)生而第二個(gè)條件不成立的條件的情況下的狀態(tài)。

3、進(jìn)程創(chuàng)建

????在UNIX中新進(jìn)程是使用fork和exec系統(tǒng)調(diào)用產(chǎn)生的:

  • fork:生成當(dāng)前進(jìn)程的一個(gè)完整相同的副本,該副本稱為子進(jìn)程。除了pid不同,其它的都是相同的。
  • exec:從一個(gè)可執(zhí)行的二進(jìn)制文件加載另一個(gè)應(yīng)用程序,來(lái)代替當(dāng)前運(yùn)行的進(jìn)程。exec并不創(chuàng)建新進(jìn)程,所以必須先通過fork復(fù)制一個(gè)舊程序,然后調(diào)用exec在系統(tǒng)中創(chuàng)建另一個(gè)應(yīng)用程序。
    ????Linux還提供了clone系統(tǒng)調(diào)用來(lái)創(chuàng)建進(jìn)程或線程,只是對(duì)應(yīng)的調(diào)用clone函數(shù)對(duì)應(yīng)的參數(shù)不同。
4、命名空間

????本質(zhì)上,命名空間建立了系統(tǒng)的不同視圖。Linux中通過采用層次結(jié)構(gòu)來(lái)表示命名空間,子命名空間的內(nèi)容對(duì)父命名空間是可見的。Docker容器技術(shù)就是在namespace機(jī)制的基礎(chǔ)上實(shí)現(xiàn)的

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容