① linux ps命令:用於顯示當前進程 (process) 的狀態
ps [options] [—help]
ps [-aAcdefHjlmNVwy][acefghLnrsSTuvxX][-C <指令名稱>][-g <群組名稱>]
[-G <群組識別碼>][-p <進程識別碼>][p <進程識別碼>][-s <階段作業>]
[-t <終端機編號>][t <終端機編號>][-u <用戶識別碼>][-U <用戶識別碼>]
[U <用戶名稱>][-<進程識別碼>][--cols <每列字元數>]
[--columns <每列字元數>][--cumulative][--deselect][--forest]
[--headers][--help][-- info][--lines <顯示列數>][--no-headers]
[--group <群組名稱>][-Group <群組識別碼>][--pid <進程識別碼>]
[--rows <顯示列數>][--sid <階段作業>][--tty <終端機編號>]
[--user <用戶名稱>][--User <用戶識別碼>][--version]
[--width <每列字元數>]
-a 顯示所有終端機下執行的進程,除了階段作業領導者之外
a 顯示現行終端機下的所有進程,包括其他用戶的進程
-A 顯示所有進程
-c 顯示CLS和PRI欄位
c 列出進程時,顯示每個進程真正的指令名稱,而不包含路徑,參數或常駐服務的標示
-C<指令名稱> 指定執行指令的名稱,並列出該指令的進程的狀況
-d 顯示所有進程,但不包括階段作業領導者的進程
-e 此參數的效果和指定"A"參數相同
e 列出進程時,顯示每個進程所使用的環境變數
-f 顯示UID,PPIP,C與STIME欄位
f 用ASCII字元顯示樹狀結構,表達進程間的相互關系
-g<群組名稱> 此參數的效果和指定"-G"參數相同,當亦能使用階段作業領導者的名稱來指定
g 顯示現行終端機下的所有進程,包括群組領導者的進程
-G<群組識別碼> 列出屬於該群組的進程的狀況,也可使用群組名稱來指定
h 不顯示標題列
-H 顯示樹狀結構,表示進程間的相互關系
-j或j 採用工作控制的格式顯示進程狀況
-l或l 採用詳細的格式來顯示進程狀況
L 列出欄位的相關信息
-m或m 顯示所有的執行緒
n 以數字來表示USER和WCHAN欄位
-N 顯示所有的進程,除了執行ps指令終端機下的進程之外
-p<進程識別碼> 指定進程識別碼,並列出該進程的狀況
p<進程識別碼> 此參數的效果和指定"-p"參數相同,只在列表格式方面稍有差異
r 只列出現行終端機正在執行中的進程
-s<階段作業> 指定階段作業的進程識別碼,並列出隸屬該階段作業的進程的狀況
s 採用進程信號的格式顯示進程狀況
S 列出進程時,包括已中斷的子進程資料
-t<終端機編號> 指定終端機編號,並列出屬於該終端機的進程的狀況
t<終端機編號> 此參數的效果和指定"-t"參數相同,只在列表格式方面稍有差異
-T 顯示現行終端機下的所有進程
-u<用戶識別碼> 此參數的效果和指定"-U"參數相同
u 以用戶為主的格式來顯示進程狀況
-U<用戶識別碼> 列出屬於該用戶的進程的狀況,也可使用用戶名稱來指定
U<用戶名稱> 列出屬於該用戶的進程的狀況
v 採用虛擬內存的格式顯示進程狀況
-V或V 顯示版本信息
-w或w 採用寬闊的格式來顯示進程狀況。
x 顯示所有進程,不以終端機來區分
X 採用舊式的Linux i386登陸格式顯示進程狀況
-y 配合參數"-l"使用時,不顯示F(flag)欄位,並以RSS欄位取代ADDR欄位
-<進程識別碼> 此參數的效果和指定"p"參數相同
--cols<每列字元數> 設置每列的最大字元數
--columns<每列字元數> 此參數的效果和指定"--cols"參數相同
--cumulative 此參數的效果和指定"S"參數相同
--deselect 此參數的效果和指定"-N"參數相同
--forest 此參數的效果和指定"f"參數相同
--headers 重復顯示標題列
--help 在線幫助
--info 顯示排錯信息
--lines<顯示列數> 設置顯示畫面的列數
--no-headers 此參數的效果和指定"h"參數相同,只在列表格式方面稍有差異
--group<群組名稱> 此參數的效果和指定"-G"參數相同
--Group<群組識別碼> 此參數的效果和指定"-G"參數相同
--pid<進程識別碼> 此參數的效果和指定"-p"參數相同
--rows<顯示列數> 此參數的效果和指定"--lines"參數相同
--sid<階段作業> 此參數的效果和指定"-s"參數相同
--tty<終端機編號> 此參數的效果和指定"-t"參數相同
--user<用戶名稱> 此參數的效果和指定"-U"參數相同
--User<用戶識別碼> 此參數的效果和指定"-U"參數相同
--version 此參數的效果和指定"-V"參數相同
--widty<每列字元數> 此參數的效果和指定"-cols"參數相同
-A 列出所有的行程
-w 顯示加寬可以顯示較多的資訊
-au 顯示較詳細的資訊
-aux 顯示所有包含其他使用者的行程
linux上進程有5種狀態:
1. 運行(正在運行或在運行隊列中等待)
2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)
4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)
5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行)
ps工具標識進程的5種狀態碼:
D 不可中斷 uninterruptible sleep (usually IO)
R 運行 runnable (on run queue)
S 中斷 sleeping
T 停止 traced or stopped
Z 僵死 a defunct (」zombie」) process
1、# ps aux //顯示所有正在內存中的程序
USER:該 process 屬於那個使用者賬號的
PID :該 process 的號碼
%CPU:該 process 使用掉的 CPU 資源百分比
%MEM:該 process 所佔用的物理內存百分比
VSZ :該 process 使用掉的虛擬內存量 (Kbytes)
RSS :該 process 佔用的固定的內存量 (Kbytes)
TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若為 pts/0 等等的,則表示為由網路連接進主機的程序。
STAT:該程序目前的狀態,主要的狀態有
R :該程序目前正在運作,或者是可被運作
S :該程序目前正在睡眠當中 (可說是 idle 狀態),但可被某些訊號 (signal) 喚醒。
D: 無法中斷的休眠狀態 (通常 IO 的進程)
T :該程序目前正在偵測或者是停止了
Z :該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆屍) 程序的狀態
<: 高優先序的行程
N: 低優先序的行程
L: 有記憶體分頁分配並鎖在記憶體內 (實時系統或捱A I/O)
START:該 process 被觸發啟動的時間
TIME :該 process 實際使用 CPU 運作的時間
COMMAND:該程序的實際指令
2、# ps -A 顯示進程信息
3、# ps -u work //顯示work進程用戶信息
4、# ps -ef //顯示所有命令,連帶命令行
5、# ps -l //將屬於自己這次登入的pid與相關信息顯示出來
F:代表這個程序的旗標 (flag), 4 代表使用者為 super user
S:代表這個程序的狀態 (STAT)
UID:程序被該 UID 所擁有
PID:就這個程序的 ID
PPID:其上級父程序的ID
C:CPU使用的資源百分比
PRI: Priority (優先執行序) 的縮寫
NI: Nice 值
ADDR:kernel function,指出該程序在內存的那個部分。如果是個 running的程序,一般就是 "-"
SZ:使用掉的內存大小
WCHAN:目前這個程序是否正在運作當中,若為 - 表示正在運作
TTY:登入者的終端機位置
TIME:使用掉的 CPU 時間。
CMD:所下達的指令為何
在預設的情況下, ps 僅會列出與目前所在的 bash shell 有關的 PID,所以, 當使用 ps -l 的時候,只有三個 PID。
6、其他
1)可以用 | 管道和 more 連接起來分頁查看
命令:ps -aux |more
2)把所有進程顯示出來,並輸出到ps001.txt文件
命令:ps -aux > ps001.txt
3)輸出指定的欄位
命令:ps -o pid,ppid,pgrp,session,tpgid,comm
② Linux進程詳解
ps是Linux 中最基礎的瀏覽系統中的進程的命令。能列出系統中運行的進程,包括進程號、命令、CPU使用量、內存使用量等。接下來解讀一下Linux操作系統的進程和Windows「Ctrl+Alt+delete」直接的差異。
在進行了解進程命令之前需要知道進程的一些狀態
ps工具標識進程的5種狀態碼:
Linux操作系統進程執行的狀態轉換圖如圖所示:
下面來看一下 ps命令
ps --help命令可以查看ps命令的使用說明
或者使用 man ps命令 查詢ps的詳細說明
在 man手冊 關於ps的解讀中,總結了一下幾個參數的含義:
以上的參數是可以拼接使用的,那就了解一些常用的參數組合
ps aux命令
ps -ef命令
查看進程狀態這兩個是命令是最常用的,使用 ps aux 可以查看進程的詳細運行狀態等。使用 ps -ef 不僅可以顯示自身的PID,也可以顯示PPID(父進程)。但是顯示不了進程的運行狀態
top命令
top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源佔用狀況,類似於Windows的任務管理器
man手冊關於top的解釋
關閉進程,重啟進程
在上一片文章中 linux的目錄結構 裡面說過,在目錄/etc/init.d/目錄下包含許多系統各種服務的啟動和停止腳本。假設進程佔用內存較大或者進程異常,我們是重啟這個進程restart。如下圖所示:
我們重啟了mysqld這個進程,可以看出進程號已經改變(從15743到15964),說明進程已經重啟。
Linux下有3個特殊的進程,idle進程(PID=0), init進程(PID=1)和kthreadd(PID=2)
我們來看一下進程狀態[下面是刪減版,進程數量太多,列舉一部分]
可以看到很多進程的PPID號是1和2。也就是init進程和kthreadd進程。
在使用Windows系統的過程中,都碰到過應用程序卡死的情況。應對此問題,我們一般都是等待失去響應的程序恢復,或者是直接使用任務管理器將其強制關閉,然後再重新打開。
在Linux中,遇到特別耗費資源的進程,當然需要使用 top命令 查看進程佔用率高的進程。或者使用 free -m命令 查看內存剩餘。假設需要強殺進程來釋放空間。我們涉及到Linux中信號📶的知識,在這里簡單的描述一下,信號的詳解會在接下來的文章裡面敘述。
free -m命令查看內存空間
在linux中存在著64種信號
使用 kill -l命令 查看信號列表
在前面說過進程會被這些個信號> (進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號強制停止運行) 那問題就在於如何發信號給這些個進程。
使用kill命令發信號
我們從上面可以看到 mysqld進程被重啟了 。
關於Linux的這一塊進程的知識還有很多,後面的文章跟大家分享僵屍進程,孤兒進程等等知識,以及守護進程(daemon進程).
③ linux命令中ps -ef是什麼意思
ps -ef表示查看全格式的全部進程。
ps是linux下最常用的也是非常強大的進程查看命令,常配合管道命令 | 和查找命令 grep 同時執行來查看特定進程。
參數含義:
-e 顯示所有進程。-f 全格式。-h 不顯示標題。-l 長格式。-w 寬輸出。a 顯示終端上的所有進程,包括其他用戶的進程。r 只顯示正在運行的進程。x 顯示沒有控制終端的進程。
(3)查看進程的命令ps擴展閱讀:
進程狀態:
R 運行,正在運行或在運行隊列中等待。
S 中斷,休眠中, 受阻, 在等待某個條件的形成或接受到信號。
D 不可中斷,收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生。
Z 僵死 ,進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放。
T 停止,進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行。
④ ps -ef是什麼意思呢
ps -ef用於查看全格式的全部進程,其中「ps」是在Linux中是查看進程的命令,「-e」參數代表顯示所有進程,「-f」參數代表全格式。
PS,是Linux系統命令之一,是在Linux中是查看進程的命令。ps查看正處於Running的進程,ps aux查看所有的進程。
linux的進程有5種狀態:
1、運行狀態(正在運行或在運行隊列中等待[就緒隊列])
2、中斷狀態(休眠中, 受阻, 在等待某個條件的形成或接受到信號)
3、不可中斷狀態(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)
4、僵死狀態(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)
5、停止狀態(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行)
(4)查看進程的命令ps擴展閱讀:
linux系統ps命令的所有參數功能:
-e:顯示所有進程。
-f:全格式。
-h:不顯示標題。
-l:長格式。
-w:寬輸出。
-a:顯示終端上的所有進程,包括其他用戶的進程。
-r:只顯示正在運行的進程。
-x:顯示沒有控制終端的進程。
-help:顯示幫助信息。
-version:顯示該命令的版本信息。
⑤ linux ps查看進程顯示的是用戶ID,不是用戶名是怎麼回事
使用ps命令時,發現部分用戶顯示的是用戶名,有些用戶顯示的是UID,例如nmon程序的運行時webmaster,但是ps顯示的不是直接顯示uid 500。
通過man發現:8位用戶名的賬戶能夠顯示完整的用戶名,9位用戶名的賬戶就顯示了UID使用下面的命令來解決;
ps -o ruser=userForLongName -e -o pid,ppid,c,stime,tty,time,cmd
注意:「userForLongName」是隨便填寫的,Linux會自動檢查此字元串的長度,為15,則15位以下的用戶名都可以正常顯示。