linux進程的幾種狀態是什么

有5種狀態:1、可執行狀態;2、可中斷等待狀態;3、不可中斷等待狀態;4、停止狀態;5、中止狀態。“可執行狀態”的state值為TASK_RUNNING,此時程序已被掛入運行隊列,處于準備運行狀態,一旦獲得處理器使用權,即可進入運行狀態。

linux進程的幾種狀態是什么

本教程操作環境: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進程的幾種狀態是什么

相關推薦:《Linux視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享