程序是乙個動態的實體,所以他是有生命的。從建立到消亡,是乙個程序的整個生命週期。在這個週期中,程序可能會經歷各種不同的狀態。一般來說,所有程序都要經歷以下的3個狀態:
就緒態。指程序已經獲得所有所需的其他資源,正在申請處理處理器資源,準備開始執行。這種情況下,稱程序處於就緒態。
阻塞態。指程序因為需要等待所需資源而放棄處理器,或者程序本不擁有處理器,且其他資源也沒有滿足,從而即使得到處理器也不能開始執行。這種情況下,程序處於阻塞態。阻塞狀態也稱休眠狀態或者等待狀態。
執行態。程序得到了處理器,並不需要等待其他任何資源,正在執行的狀態,稱之為執行態。只有在執行態時,程序才可以使用所申請到的資源。
在linux系統中,將各種狀態進行了重新組織,由此得到了linux程序的幾個狀態:
◆執行狀態(task_running)
當程序正在被cpu執行,或已經準備就緒隨時可由排程程式執行,則稱該程序為處於執行狀態(running)。程序可以在核心態執行,也可以在使用者態執行。當系統資源已經可用時,程序就被喚醒而進入準備執行狀態,該狀態稱為就緒態。這些狀態(圖中中間一列)在核心中表示方法相同,都被成為處於task_running狀態。
◆可中斷睡眠狀態(task_interruptible)
當程序處於可中斷等待狀態時,系統不會排程該進行執行。當系統產生乙個中斷或者釋放了程序正在等待的資源,或者程序收到乙個訊號,都可以喚醒程序轉換到就緒狀態(執行狀態)。
◆暫停狀態(task_stopped)
當程序收到訊號sigstop、sigtstp、sigttin或sigttou時就會進入暫停狀態。可向其傳送sigcont訊號讓程序轉換到可執行狀態。
◆僵死狀態(task_zombie)
當程序已停止執行,但其父程序還沒有詢問其狀態時,則稱該程序處於僵死狀態。
◆不可中斷睡眠狀態(task_uninterruptible)
與可中斷睡眠狀態類似。但處於該狀態的程序只有被使用wake_up()函式明確喚醒時才能轉換到可執行的就緒狀態。
當乙個程序的執行時間片用完,系統就會使用排程程式強制切換到其它的程序去執行。另外,如果程序在核心態執行時需要等待系統的某個資源,此時該程序就會呼叫
sleep_on()或sleep_on_interruptible()自願地放棄cpu的使用權,而讓排程程式去執行其它程序。程序則進入睡眠狀
態(task_uninterruptible或task_interruptible)。
只有當程序從「核心執行態」轉移到「睡眠狀態」時,核心才會進行程序切換操作。在核心態下執行的程序不能被其它程序搶占,而且乙個程序不能改變另乙個程序的狀態。為了避免程序切換時造成核心資料錯誤,核心在執行臨界區**時會禁止一切中斷。
Centos 程序執行狀態 ps
ps 顯示系統程序在瞬間的執行狀態 相關選項 a顯示所有使用者的程序,包含每個程式的完整路徑 x顯示所有系統程式,包括那些沒有終端的程式 u顯示使用者的名稱和起始時間 f詳細顯示程式執行的路徑 c只顯示程序名稱,不顯示完整路徑 e除將核心程序以外所有程序的資訊寫到標準輸出 ps 展示資訊 1.pid...
mysql 執行狀態
show processlist 或使用mysql administrator 檢視當前執行connection的狀態 state列出的狀態主要有以下幾種 checking table 正在檢查資料表 這是自動的 closing tables 正在將表中修改的資料重新整理到磁碟中,同時正在關閉已經用...
檢測某個php程序執行狀態shell
一.主要shell bin bash executepath readlink f dirname 0 executelog readlink f executepath check.log envpath readlink f executepath env.sh source envpath s...