您好,登錄后才能下訂單哦!
這篇“linux進程的狀態有哪些”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“linux進程的狀態有哪些”文章吧。
有5種狀態:1、可執行狀態;2、可中斷等待狀態;3、不可中斷等待狀態;4、停止狀態;5、中止狀態。“可執行狀態”的state值為TASK_RUNNING,此時程序已被掛入運行隊列,處于準備運行狀態,一旦獲得處理器使用權,即可進入運行狀態。
本教程操作環境:linux5.9.8系統、Dell G3電腦。
由操作系統定義,并由操作系統所操控的一個特殊的數據結構實例叫做進程。它連接了用戶代碼,擁有代碼運行所需的獨立內存空間,在調度器的調度下使用分配給它的處理器時間片來運行。
Linux進程的5種狀態
在Linux系統中,一個進程被創建之后,在系統中可以有下面5種狀態。進程的當前狀態記錄在進程控制塊的state成員中。
就緒狀態和運行狀態(可執行狀態)
就緒狀態的狀態標志state的值為TASK_RUNNING。此時,程序已被掛入運行隊列,處于準備運行狀態。一旦獲得處理器使用權,即可進入運行狀態。
當進程獲得處理器而運行時 ,state的值仍然為TASK_RUNNING,并不發生改變;但Linux會把一個專門用來指向當前運行任務的指針current指向它,以表示它是一個正在運行的進程。
可中斷等待狀態
狀態標志state的值為TASK_INTERRUPTIBL。此時,由于進程未獲得它所申請的資源而處在等待狀態。一旦資源有效或者有喚醒信號,進程會立即結束等待而進入就緒狀態。
不可中斷等待狀態
狀態標志state的值為TASK_UNINTERRUPTIBL。此時,進程也處于等待資源狀態。一旦資源有效,進程會立即進入就緒狀態。這個等待狀態與可中斷等待狀態的區別在于:處于TASK_UNINTERRUPTIBL狀態的進程不能被信號量或者中斷所喚醒,只有當它申請的資源有效時才能被喚醒。
這個狀態被應用在內核中某些場景中,比如當進程需要對磁盤進行讀寫,而此刻正在DMA中進行著數據到內存的拷貝,如果這時進程休眠被打斷(比如強制退出信號)那么很可能會出現問題,所以這時進程就會處于不可被打斷的狀態下。
停止狀態
狀態標志state的值為TASK_STOPPED。當進程收到一個SIGSTOP信號后,就由運行狀態進入停止狀態,當受到一個SIGCONT信號時,又會恢復運行狀態。這種狀態主要用于程序的調試,又被叫做“暫停狀態”、“掛起狀態”。
中止狀態
狀態標志state的值為TASK_DEAD。進程因某種原因而中止運行,進程占有的所有資源將被回收,除了task_struct結構(以及少數資源)以外,并且系統對它不再予以理睬,所以這種狀態也叫做“僵死狀態”,進程成為僵尸進程。
在進程的整個生命周期中,它可在5種狀態之間轉換。Linux進程5種狀態之間的轉換關系如下圖所示:
以上就是關于“linux進程的狀態有哪些”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。