系統維護的時候難免會遇到程序的狀態的查詢和管理,到底什麼是r,有的是s,有的還是s+呢?一直有些混沌的問題,今天細細的來總結一下: ps是用來報告系統中程式執行狀況的命令這個是無可厚非的,linux程序的狀態:d 不可中斷睡眠 (通常是在io操作) 收到訊號不喚醒和不可執行, 程序必須等待直到有中斷發生r 正在執行或可執行(在執行佇列排隊中)s 可中斷睡眠 (休眠中, 受阻, 在等待某個條件的形成或接受到訊號)t 已停止的 程序收到sigstop, sigstp, sigtin, sigtou訊號後停止執行w 正在換頁(2.6.核心之前有效) x 死程序 (未開啟) z 殭屍程序 程序已終止, 但程序描述符存在, 直到父程序呼叫wait4()系統呼叫後釋放bsd風格的 < 高優先順序(not nice to other users) n 低優先順序(nice to other users) l 頁面鎖定在記憶體(實時和定製的io) s 乙個資訊頭 l 多執行緒(使用 clone_thread,像nptl的pthreads的那樣) + 在前台程序組
◆執行狀態r (task_running)
當程序正在被cpu執行,或已經準備就緒隨時可由排程程式執行,則稱該程序為處於執行狀態(running)。程序可以在核心態執行,也可以在使用者態執行。當系統資源已經可用時,程序就被喚醒而進入準備執行狀態,該狀態稱為就緒態。這些狀態(圖中中間一列)在核心中表示方法相同,都被成為處於task_running狀態。
◆可中斷睡眠狀態 s(task_interruptible)
當程序處於可中斷等待狀態時,系統不會排程該程序執行。當系統產生乙個中斷或者釋放了程序正在等待的資源,或者程序收到乙個訊號,都可以喚醒程序轉換到就緒狀態(執行狀態)。
◆不可中斷睡眠狀態 d(task_uninterruptible)
與可中斷睡眠狀態類似。但處於該狀態的程序只有被使用wake_up()函式明確喚醒時才能轉換到可執行的就緒狀態。
◆暫停狀態 t(task_stopped)
當程序收到訊號sigstop、sigtstp、sigttin或sigttou時就會進入暫停狀態。可向其傳送sigcont訊號讓程序轉換到可執行狀態。在linux 0.11中,還未實現對該狀態的轉換處理。處於該狀態的程序將被作為程序終止來處理。
◆僵死狀態 z(task_zombie)
當程序已停止執行,但其父程序還沒有詢問其狀態時,則稱該程序處於僵死狀態。
當乙個程序的執行時間片用完,系統就會使用排程程式強制切換到其它的程序去執行。另外,如果程序在核心態執行時需要等待系統的某個資源,此時該程序就會呼叫sleep_on()或sleep_on_interruptible()自願地放棄cpu的使用權,而讓排程程式去執行其它程序。程序則進入睡眠狀態(task_uninterruptible或task_interruptible)。
只有當程序從「核心執行態」轉移到「睡眠狀態」時,核心才會進行程序切換操作。在核心態下執行的程序不能被其它程序搶占,而且乙個程序不能改變另乙個程序的狀態。為了避免程序切換時造成核心資料錯誤,核心在執行臨界區**時會禁止一切中斷。
linux 程序 狀態
程序在執行過程中會根據環境來改變state。linux程序有以下狀態 running 程序處於執行 它是系統的當前程序 或者準備執行狀態 它在等待系統將cpu分配給它 waiting 程序在等待乙個事件或者資源。linux將等待程序分成兩類 可中斷與不可中斷。可中斷等待程序可以被訊號中斷 不可中斷等...
linux程序狀態
1.r task running,正在執行或者處於就緒狀態 很多作業系統教科書將正在cpu上執行的程序定義為running狀態 而將可執行但是尚未被排程執行的程序定義為ready狀態,這兩種狀態在linux下統一為 task running狀態。例子 ps aux 會看到ps這個程式命令的執行狀態是...
Linux程序狀態
在linux中,常見的程序狀態有以下幾種 task running 0 程序正在執行或者等待被排程執行 task interruptible 1 程序由於等待某個系統資源或者某個事件而處於掛起 睡眠 狀態。對其傳送訊號 signal 可以將其喚醒 進入task running狀態 task unin...