天天看點

cmd檢視某一個程序是否正在運作_Linux ps指令詳解:檢視正在運作的程序

ps 指令是最常用的監控程序的指令,通過此指令可以檢視系統中所有運作程序的詳細資訊。ps 指令有多種不同的使用方法,這常常給初學者帶來困惑。在各種 Linux 論壇上,詢問 ps 指令文法的文章屢見不鮮,而出現這樣的情況,還要歸咎于 UNIX 悠久的曆史和龐大的派系。在不同的 Linux 發行版上,ps 指令的文法各不相同,為此,Linux 采取了一個折中的方法,即融合各種不同的風格,兼顧那些已經習慣了其它系統上使用 ps  指令的使用者。ps 指令的基本格式如下:

[[email protected] ~]# ps aux

#檢視系統中所有的程序,使用 BS 作業系統格式

[[email protected] ~]# ps -le

#檢視系統中所有的程序,使用 Linux 标準指令格式

選項:

  • a:顯示一個終端的所有程序,除會話引線外;
  • u:顯示程序的歸屬使用者及記憶體的使用情況;
  • x:顯示沒有控制終端的程序;
  • -l:長格式顯示更加詳細的資訊;
  • -e:顯示所有程序;

可以看到,ps 指令有些與衆不同,它的部分選項不能加入"-",比如指令"ps aux",其中"aux"是選項,但是前面不能帶“-”。大家如果執行 "man ps" 指令,則會發現 ps 指令的幫助為了适應不同的類 UNIX 系統,可用格式非常多,不友善記憶。是以,我建議大家記憶幾個固定選項即可。比如:

  • "ps aux" 可以檢視系統中所有的程序;
  • "ps -le" 可以檢視系統中所有的程序,而且還能看到程序的父程序的 PID 和程序優先級;
  • "ps -l" 隻能看到目前 Shell 産生的程序;

有這三個指令就足夠了,下面分别來檢視。【例 1】

[[email protected] ~]# ps aux
#檢視系統中所有的程序
USER PID %CPU %MEM  VSZ  RSS   TTY STAT START TIME COMMAND
root   1  0.0  0.2 2872 1416   ?   Ss   Jun04 0:02 /sbin/init
root   2  0.0  0.0    0    0   ?    S   Jun04 0:00 [kthreadd]
root   3  0.0  0.0    0    0   ?    S   Jun04 0:00 [migration/0]
root   4  0.0  0.0    0    0   ?    S   Jun04 0:00 [ksoftirqd/0]
…省略部分輸出…
           

表 1 中羅列出了以上輸出資訊中各列的具體含義。

表 1 ps指令輸出資訊含義

表頭 含義
USER 該程序是由哪個使用者産生的。
PID 程序的 ID。
%CPU 該程序占用 CPU 資源的百分比,占用的百分比越高,程序越耗費資源。
%MEM 該程序占用實體記憶體的百分比,占用的百分比越高,程序越耗費資源。
VSZ 該程序占用虛拟記憶體的大小,機關為 KB。
RSS 該程序占用實際實體記憶體的大小,機關為 KB。
TTY 該程序是在哪個終端運作的。其中,tty1 ~ tty7 代表本地控制台終端(可以通過 Alt+F1 ~ F7 快捷鍵切換不同的終端),tty1~tty6 是本地的字元界面終端,tty7 是圖形終端。pts/0 ~ 255 代表虛拟終端,一般是遠端連接配接的終端,第一個遠端連接配接占用 pts/0,第二個遠端連接配接占用 pts/1,依次増長。
STAT 程序狀态。常見的狀态有以下幾種:
  1. -D:不可被喚醒的睡眠狀态,通常用于 I/O 情況。
  2. -R:該程序正在運作。
  3. -S:該程序處于睡眠狀态,可被喚醒。
  4. -T:停止狀态,可能是在背景暫停或程序處于除錯狀态。
  5. -W:記憶體互動狀态(從 2.6 核心開始無效)。
  6. -X:死掉的程序(應該不會出現)。
  7. -Z:僵屍程序。程序已經中止,但是部分程式還在記憶體當中。
  8. -
  9. -N:低優先級。
  10. -L:被鎖入記憶體。
  11. -s:包含子程序。
  12. -l:多線程(小寫 L)。
  13. -+:位于背景。
START 該程序的啟動時間。
TIME 該程序占用 CPU 的運算時間,注意不是系統時間。
COMMAND 産生此程序的指令名。

【例 2】"ps aux"指令可以看到系統中所有的程序,"ps -le"指令也能看到系統中所有的程序。由于 "-l" 選項的作用,是以 "ps -le" 指令能夠看到更加詳細的資訊,比如父程序的 PID、優先級等。但是這兩個指令的基本作用是一緻的,掌握其中一個就足夠了。

[[email protected] ~]# ps -le
F S UID PID PPID C  PRI Nl ADDR  SZ WCHAN TTY      TIME  CMD
4 S   0   1    0 0  80   0 -    718 -     ?    00:00:02  init
1 S   0   2    0 0  80   0 -      0 -     ?    00:00:00  kthreadd
1 S   0   3    2 0 -40   - -      0 -     ?    00:00:00  migration/0
1 S   0   4    2 0  80   0 -      0 -     ?    00:00:00  ksoflirqd/0
1 S   0   5    2 0 -40   - -      0 -     ?    00:00:00  migration/0
…省略部分輸出…
           

表 2 羅列出以上輸出資訊中各列的含義。

表 2 ps -le 指令輸出資訊

表頭 含義
F 程序标志,說明程序的權限,常見的标志有兩個:
  • 1:程序可以被複制,但是不能被執行;
  • 4:程序使用超級使用者權限;
S 程序狀态。具體的狀态和"psaux"指令中的 STAT 狀态一緻;
UID 運作此程序的使用者的 ID;
PID 程序的 ID;
PPID 父程序的 ID;
C 該程序的 CPU 使用率,機關是百分比;
PRI 程序的優先級,數值越小,該程序的優先級越高,越早被 CPU 執行;
NI 程序的優先級,數值越小,該程序越早被執行;
ADDR 該程序在記憶體的哪個位置;
SZ 該程序占用多大記憶體;
WCHAN 該程序是否運作。"-"代表正在運作;
TTY 該程序由哪個終端産生;
TIME 該程序占用 CPU 的運算時間,注意不是系統時間;
CMD 産生此程序的指令名;

【例 3】如果不想看到所有的程序,隻想檢視一下目前登入産生了哪些程序,那隻需使用 "ps -l" 指令就足夠了:

[[email protected] ~]# ps -l
#檢視目前登入産生的程序
F S UID   PID  PPID C PRI NI ADDR SZ WCHAN TTY       TIME CMD
4 S 0   18618 18614 0  80  0 - 1681  -     pts/1 00:00:00 bash
4 R 0   18683 18618 4  80  0 - 1619  -     pts/1 00:00:00 ps
           

可以看到,這次從 pts/1 虛拟終端登入,隻産生了兩個程序:一個是登入之後生成的 Shell,也就是 bash;另一個是正在執行的 ps 指令。我們再來說說僵屍程序。僵屍程序的産生一般是由于程序非正常停止或程式編寫錯誤,導緻子程序先于父程序結束,而父程序又沒有正确地回收子程序,進而造成子程序一直存在于記憶體當中,這就是僵屍程序。僵屍程序會對主機的穩定性産生影響,是以,在産生僵屍程序後,一定要對産生僵屍程序的軟體進行優化,避免一直産生僵屍程序;對于已經産生的僵屍程序,可以在查找出來之後強制中止。

cmd檢視某一個程式是否正在運作_Linux ps指令詳解:檢視正在運作的程式