『壹』 linux進程的幾種狀態
Linux中進程分類
①交互進程:由一個shell啟動的進程,交互進程既可以在前台運行,也可以在後台運行。
②批處理進程:這種進程和終端沒有聯系,是一個進程序列。
③監控進程:也稱守護進程,是一個在後台運行且不受任何終端控制的特殊進程,用於執行特定的系統任務。
進程的狀態
①可運行狀態:此時進程正在運行或者正在運行隊列中等待准備運行。
②等待狀態:此時進程在等待一個事件的發生或某種系統資源。在Linux系統中等待狀態又細分為兩種等待狀態:可中斷的等待狀態和不可中斷的等待狀態。
③暫停狀態:處於暫停狀態的進程被暫停運行。
④僵死狀態:每個進程在運行結束後都會處於僵死狀態,等待父進程調用進而釋放系統資源,處於該狀態的進程已經運行結束,但是它的父進程還沒有釋放其系統資源。
『貳』 如何在Linux中查看所有正在運行的進程
ps命令用於查看系統中的進程狀態,格式為:「ps [參數]」,
常見的ps命令參數包括有:
-a 顯示所有的進程(包括其他用戶的)
-u 用戶以及其他詳細信息
-x 顯示沒有控制終端的進程
Linux系統中時刻運行著許許多多的進程,如果能夠合理的管理它們,絕對有益於對系統的性能優化,Linux系統中進程最常見的5種不同的狀態是運行、中斷、不可中斷、僵死與停止,它們的含義分別是:
R(運行):正在運行或在運行隊列中等待。
S(中斷):休眠中, 在等待某個條件的形成或接收到信號。
D(不可中斷):收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生。
Z:(僵死):進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放。
T:(停止):進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行。當執行"ps aux"命令後通常會看到下面格式的進程狀態,表格中只是列舉了部分輸出值,而且正常的輸出值中不包括中文注釋部分:
top命令前面的五行為系統整體的統計信息:
第1行:系統時間,運行時間,登錄終端數,系統負載(分別為1分鍾、5分鍾、15分鍾的平均值,數值越小意味著負載越低)。
第2行:進程總數,運行中的,睡眠中的,停止的,僵死的。
第3行:用戶佔用資源,系統內核佔用資源,改變過優先順序的進程,空閑的資源,等待輸入輸出的時間。此行數據均為CPU數據並以百分比格式顯示,例如"99.2 id"意味著有99.2%的CPU處理器資源正在空閑中。
第4行:物理內存總量,使用量,空閑量,作為內核緩存的內存量。
第5行:虛擬內存總量,使用量,空閑量,已被提前載入的內存數據。
為了更好的了解Linux伺服器,成為一名合格的運維人員,您必須具備快速查看Linux系統運行狀態的能力。Linux命令最大的特點就是要與其他命令搭配使用,重於靈活運用,可參考linuxprobe。COM上ps、top命令經常用於系統工作查看狀態,ps命令與管道符技術搭配使用,可用於來抓取到某個指定服務進程所對應的PID號碼。
『叄』 Linux ps state sl+是什麼意思
下面這是一段java代碼,
public class Z
{
public static void main(String[] args)
{
new Z();
}
private Z()
{
Z a1=this;
Z a2=this;
synchronized(a1)
{
try
{
a2.wait();
System.out.println("done waiting");
}
catch (InterruptedException e)
{
System.out.println("InterruptedException");
}
catch (Exception e)
{
System.out.println("Exception");
}
finally
{
System.out.println("finally");
}
}
System.out.println("all done");
}
}
編譯後運行
java Z
沒有任何輸出,程序也不會結束。
ps看了一下狀態,發現狀態是sl+,
在Linux中,狀態如下:
D 不可中斷 Uninterruptible sleep (usually IO)
R 正在運行,或在隊列中的進程
S 處於休眠狀態
T 停止或被追蹤
Z 僵屍進程
W 進入內存交換(從內核2.6開始無效)
X 死掉的進程
< 高優先順序
N 低優先順序
L 有些頁被鎖進內存
s 包含子進程
+ 位於後台的進程組
l 多線程,克隆線程
根據以上信息,得知其處於休眠狀態,多線程,且是後台進程。
我們知道Java中,
wait():讓線程處於等待狀態。這時線程會釋放鎖。並存入到了線程池中。
notify():通常喚醒線程池中的第一個。
notifyAll():將線程池中的所有等待線程都喚醒。
所以在wait的時候,此線程休眠等待其他線程notify,所以就處於休眠狀態了。