有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影片教學》
以上是linux進程的幾種狀態是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!