linux基礎命令---顯示進程ps
ps
ps指令可以顯示系統中當前進程的信息,它的輸出結果是高度可定制的。如果您希望重復更新所選內容和顯示的信息,請使用top(1)代替。
請註意,“ps-aux”與“ps aux”不同。POSIX和UNIX標準要求“ps-aux”打印名為“x”的用戶擁有的所有進程,以及打印由-a選項選擇的所有進程。如果名為“x”的用戶不存在,此ps可以將命令解釋為“ps aux”,並打印警告。此行為旨在幫助轉換舊腳本和習慣。它是脆弱的,隨時可能發生變化,因此不應依賴它。
默認情況下,ps選擇所有具有相同有效用戶ID(EUID=EUID)的進程作為當前用戶,並與調用方相關聯的終端。它顯示進程ID(PID=PID)、與進程關聯的終端(tname=TTY)、[dd-]hh:mm:SS格式的累計CPU時間(time=TIME)和可執行名稱(ucmd=CMD)。默認情況下輸出未排序。
使用BSD樣式的選項將向默認顯示中添加進程狀態(stat=STAT),並顯示命令args(args=命令)而不是可執行名稱。您可以使用PS_FORMAT環境變量重寫此操作。使用BSD樣式的選項還將更改流程選擇,以包括您擁有的其他終端(TTY)上的進程;或者,這可以描述為將選擇設置為篩選的所有進程的集合,以排除其他用戶擁有的進程或終端上的進程。當選項被描述為“相同”時,不考慮這些影響,所以-M將被認為與Z相同等等。
此命令的適用範圍:RedHat、RHEL、Ubuntu、CentOS、SUSE、openSUSE、Fedora。
1、語法
ps [選項]
2、選項列表
選項 |
說明 |
--help |
顯示幫助文檔 |
-V | V | --version |
顯示命令版本 |
--info |
顯示調試信息 |
L |
列出所有的格式 |
簡單選項 |
|
-A | -e |
選擇所有進程 |
-N | --deselect |
反向選擇不符合條件的 |
T |
選擇符合的終端 |
-a |
選擇除會話進程和與終端無關的進程以外的所有進程。 |
a |
此選項導致ps列出帶有終端(TTY)的所有進程,或在與x選項一起使用時列出所有進程。 |
-d |
選擇所有進程,忽略進程所有者 |
g |
全部的進程,包含會話領導 |
r |
將選擇限制為僅運行進程。 |
x |
此選項導致ps列出您擁有的所有進程(與ps相同的EUID),或者在與a選項一起使用時列出所有進程。 |
多個選項 |
這些選項以空白分隔或逗號分隔列表的形式接受單個參數。它們可以多次使用。 |
-Ccmdlist |
按命令名選擇。這將選擇在cmdlist中給出可執行名稱的進程。 |
-Ggrplist |
選擇進程所屬的組id與給定list匹配的進程 |
Uuserlist |
按有效用戶ID(EUID)或名稱選擇。有效用戶ID描述進程使用其文件訪問權限的用戶 |
-Uuserlist |
按實際用戶ID(RUID)或名稱進行選擇。真正的用戶ID標識創建進程的用戶, |
-ggrplist |
按會話或有效組名選擇。 |
p pidlist |
按進程ID選擇。 |
-ppidlist |
按進程ID選擇。 |
-ssesslist |
按照會話ID選擇 |
t ttylist |
通過tty選擇。與-t和--tty幾乎相同,但也可以與空ttylist一起使用,以指示與ps關聯的終端。 |
-t ttylist |
選擇指定的tty |
-uuserlist |
按有效用戶ID(EUID)或名稱選擇,等價於“U”和“--user” |
--Groupgrplist |
等價於“-G” |
--Useruserlist |
等價於“-U” |
--groupgrplist |
按有效組ID(EGID)或名稱選擇。有效組ID描述進程使用其文件訪問權限的組。 |
--pidpidlist |
等價於“-p”和“p” |
-ppidppidlist |
選擇父進程id匹配的進程 |
--sidsesslist |
等價於“-s” |
--ttyttylist |
等價於“-t”和“t” |
--useruserlist |
等價於“-u”和“U” |
-123 |
等價於“--sid 123” |
123 |
等價於“—pid 123” |
3、輸出格式控制
格式 |
說明 |
-f | -F |
輸出完整的格式。它還會導致輸出命令參數。當與-L一起使用時,將添加NLWP(線程數)和LWP(線程ID)列。 |
-Oformat |
類似-o,但預加載了一些默認列。等價於“-o pid,format,state,tname,time,command”或者“-o pid,format,tname,time,cmd” |
Oformat |
預加載的o。當用作格式設置選項時,它與-O完全相同,具有BSD個性。 |
-M |
添加一列安全數據。 |
X |
寄存器格式 |
Z |
等價於“-M” |
-c |
顯示-l選項的不同調度程序信息。 |
j |
BSD作業控制格式 |
-j |
作業格式 |
l |
BSD長格式 |
-l |
長格式,經常和“-y”一起使用 |
oformat |
等價於“-o”和“--format” |
-oformat |
用戶定義格式。format是以空格分隔或逗號分隔的列表形式的單個參數,它提供了一種指定單個輸出列的方法。標頭可以按需要重命名(ps -o pid,ruser=RealUser -o comm=Command)。如果所有列標題都是空的(ps -o pid= -o comm=),那麽標題行將不會被輸出。寬標頭所需的列寬度將增加;這可用於擴展諸如WCHAN之類的列(ps -o pid,wchan=WIDE-WCHAN-COLUMN -o comm)。顯式寬度控制(ps opid,wchan:42,cmd)也被提供。ps -o pid=X,comm=Y的行為隨個性而變化,輸出可能是一個名為“X,comm=Y”的列,也可以是兩個名為“X”和“Y”的列。使用PS_FORMAT環境變量按需要指定默認值;DefSysV和DefBSD是可用於選擇默認UNIX或BSD列的宏。 |
s |
顯示信號格式 |
u |
以用戶為主的模式 |
v |
以虛擬內存為主的模式 |
-y |
不顯示標誌位 |
-Z |
顯示安全上下文格式 |
--formatformat |
和“-o”一樣 |
--context |
顯示安全上下文格式 |
4、輸出修飾符
修飾符 |
說明 |
-H |
顯示進程層次結構 |
O order |
排序,過時的操作 |
S |
總結一些信息,如CPU使用情況,從死子進程到父進程。 |
c |
顯示真正的命令名。這是從可執行文件的名稱派生出來的,而不是從argv值派生的。因此,沒有顯示命令參數和對它們的任何修改 |
e |
在命令之後顯示環境 |
f | --forest |
ASCII格式的進程層次結構 |
h |
沒有頭 |
k spec |
指定排序順序,等價於“--sort” |
-nnamelist | N namelist |
正確的WCHAN顯示需要名稱列表文件,並且必須與當前Linux內核完全匹配才能得到正確的輸出。如果沒有此選項,則名稱列表的默認搜索路徑是: $PS_SYSMAP $PS_SYSTEM_MAP /proc/*/wchan /boot/System.map-`uname -r` /boot/System.map /lib/modules/`uname -r`/System.map /usr/src/linux/System.map /System.map |
n |
WCHAN和User的數字輸出。(包括所有類型的UID和GID) |
-w | w |
寬輸出,對無限寬度使用此選項兩次 |
--cols n | --columns n | --width n |
設置屏幕寬度 |
--cumulative |
包括一些死子進程數據(作為父進程的和) |
--headers |
重復頭行,每頁輸出一行 |
--no-headers |
根本不打印標題行 |
--lines n | --rows n |
設置屏幕高度 |
--sort spec |
排序。語法是“[+|-]key[,[+|-]key[,...]]”,例如,ps jax --sort=uid,-ppid,+pid |
5、線程模式
線程模式 |
說明 |
H |
把線程當做進程顯示 |
-L |
顯示線程的LWP NLWP |
-T |
顯示線程的SPID |
m | -m |
在進程之後顯示線程 |
6、說明
這個ps通過讀取“/proc”中的虛擬文件來工作。這個ps不需要是setuid kmem,也不需要有任何特權來運行。不要給這個ps任何特殊的權限。此ps需要訪問名稱列表數據以獲得正確的WCHAN顯示。對於2.6之前的內核,必須安裝System.map文件。
CPU使用率當前表示為進程在整個生命周期中運行的時間百分比。CPU使用率不太可能達到100%。
SIZE和RSS字段不計算進程的某些部分,包括頁表、內核堆棧、結構體thread_info和task_struct。這通常是至少20kb的內存大小。SIZE是進程的虛擬大小(代碼數據堆棧)。
標記為“defunct”的進程是死進程(所謂的“僵屍”),因為它們的父進程沒有正確地銷毀它們。如果父進程退出,則init(8)將銷毀這些進程。
如果用戶名的長度大於顯示列的長度,則將顯示數字用戶ID。
7、進程標誌
這些值的和顯示在“F”列中,該列由標誌輸出說明符提供。
1,已經fork,但是沒有執行。
4,使用超級用戶權限。
8、進程狀態碼
下面是s、stat和state輸出說明符(標頭“stat”或“S”)將顯示的用於描述進程狀態的不同值:
D,不間斷睡眠(通常為IO)。
R,正在運行或可運行(在運行隊列上)。
S,可中斷睡眠(等待事件完成)。
T,停止,要麽是被作業控制信號阻止,要麽是因為它正在被跟蹤。
W,分頁(自2.6.xx內核以來無效)。
X,死了(不應該被看見)。
Z,已停止(“僵屍”)進程,終止但未由其父進程收獲。
對於bsd格式和當使用stat關鍵字時,可能會顯示其他字符:
<,高優先級(對其他用戶不好)。
N,低優先級(對其他用戶很好)。
L,將頁面鎖定在內存中(用於實時和自定義IO)。
s,是會話。
l,是多線程的。
+,在前臺進程組中。
9、AIX格式描述符
這個ps支持AIX格式描述符,它們的工作方式有點像printf(1)和printf(3)的格式代碼。例如,正常的默認輸出可以這樣產生:ps -eo "%p %y %x %c
CODE NORMAL HEADER
%C pcpu %CPU
%G group GROUP
%P ppid PPID
%U user USER
%a args COMMAND
%c comm COMMAND
%g rgroup RGROUP
%n nice NI
%p pid PID
%r pgid PGID
%t etime ELAPSED
%u ruser RUSER
%x time TIME
%y tty TTY
%z vsz VSZ
10、標準格式說明符
以下是用於控制輸出格式(例如,使用選項-o)或使用GNU樣式的“--sort”序選項對所選進程進行排序的不同關鍵字。例如,“ps -eo pid,user,args --sort user”。這個版本的ps試圖識別大多數在ps的其他實現中使用的關鍵字。以下用戶定義的格式說明符可能包含空格:args, cmd, comm,command, fname, ucmd, ucomm, lstart, bsdstart, start。某些關鍵字可能無法用於排序。
CODE |
HEADER |
說明 |
%cpu |
%CPU |
進程的CPU利用率為“#.#”格式。當前,它是CPU時間除以進程運行的時間(cputime/realtime比率),表示為百分比。除非你是幸運的,否則它不會達到100%。(別名pcpu) |
%mem |
%MEM |
進程的駐留集大小與機器上物理內存的比率,以百分比表示。(別名PMEM) |
args |
COMMAND |
命令,它的所有參數都是字符串。可以顯示對參數的修改。該列中的輸出可能包含空格。標記為“已失效”的進程部分死亡,等待其父進程完全銷毀。有時進程args將不可用;當發生這種情況時,ps將可執行文件的名稱打印在括號中。(別名cmd,命令)。 當最後指定該列時,該列將擴展到顯示的邊緣。如果ps不能確定顯示寬度,例如當輸出被重定向(管道)到一個文件或另一個命令時,輸出寬度是未定義的。(它可以是80,無限,TERM等決定)環境變量COLUMNS或-cols選項可以用於精確地確定這種情況下的寬度。w或-w選項也可用於調整寬度。 |
blocked |
BLOCKED |
blocked信號掩碼。根據字段的寬度,以十六進制格式顯示32位或64位掩碼。(別名sig_block, sigmask)。 |
bsdstart |
START |
命令開始的時間。如果進程在24小時前啟動,則輸出格式為“hh:mm”,否則為“mmm dd”(其中mmm是月份的三個字母)。 |
bsdtime |
TIME |
用戶和系統的累積CPU時間,。顯示格式通常為“mmm:ss”,但如果進程占用的cpu時間超過999分鐘,則可以移到右邊。 |
c |
C |
處理器利用率當前,這是進程生存期內使用百分比的整數值。(見%cpu)。 |
caught |
CAUGHT |
捕獲信號的掩碼,見信號(7)。根據字段的寬度,以十六進制格式顯示32或64位掩碼。(別名sig_catch, sigcatch) |
cgroup |
CGROUP |
顯示進程所屬的控制組。 |
class |
CLS |
進程的調度類。(別名policy, cls)。字段的可能值是: - not reported TS SCHED_OTHER FF SCHED_FIFO RR SCHED_RR B SCHED_BATCH ISO SCHED_ISO IDL SCHED_IDLE ? unknown value |
cls |
CLS |
同class |
cmd |
CMD |
同args |
comm |
COMMAND |
命令名(只有可執行的名稱)。將不會顯示對命令名的修改。標記為“已失效”的進程部分死亡,等待其父進程完全銷毀。該列中的輸出可能包含空格。(別名ucmd,ucomm)。 當最後指定該列時,該列將擴展到顯示的邊緣。如果ps不能確定顯示寬度,例如當輸出被重定向(管道)到一個文件或另一個命令時,輸出寬度是未定義的(它可以是80,無限,TERM)。COLUMNS環境變量或--cols選項可以用於精確地確定這種情況下的寬度。w或-w選項也可用於調整寬度。 |
command |
COMMAND |
同args |
cp |
CP |
CPU使用率/ms |
cputime |
TIME |
累計CPU時間,"[DD-]HH:MM:SS"格式。(別名time)。 |
egid |
EGID |
進程的有效組ID數為十進制整數。(別名gid)。 |
egroup |
EFROUP |
進程的有效組ID。如果可以獲得並且字段寬度允許,這將是文本組ID,否則將是十進制表示。(別名group)。 |
eip |
EIP |
指令指針 |
esp |
ESP |
棧指針 |
etime |
ELAPSED |
自進程啟動以來,以[dd-]hh:]mm:SS形式運行的時間。 |
euid |
EUID |
有效用戶ID,別名uid |
euser |
EUSER |
有效用戶名。如果可以獲得並且字段寬度允許,這將是文本用戶ID,否則將是十進制表示。n選項可用於強制十進制表示。(別名uname,user)。 |
f |
F |
與進程關聯的標誌,請參閱流程標誌部分。(別名flag, flags)。 |
fgid |
FGID |
文件系統訪問組ID。(別名fsgid)。 |
fgroup |
FGROUP |
文件系統訪問組ID。如果可以獲得並且字段寬度允許,這將是文本用戶ID,否則將是十進制表示。(別名fsgroup) |
flag |
F |
同f |
flags |
F |
同f |
fname |
COMMAND |
進程可執行文件的基名的前8個字節。該列中的輸出可能包含空格。 |
fuid |
FUID |
文件系統訪問用戶ID。(別名fsuid)。 |
fuser |
FUSER |
文件系統訪問用戶ID。如果可以獲得並且字段寬度允許,這將是文本用戶ID,否則將是十進制表示。 |
gid |
GID |
同egid |
group |
GROUP |
同egroup |
ignored |
IGNORED |
被忽略的信號的掩碼,根據字段的寬度,以十六進制格式顯示32位或64位掩碼。(別名sig_ignore, sigignore) |
label |
LABEL |
安全標簽,最常用於SELinux上下文數據。這是針對在高安全系統上發現的強制訪問控制(“MAC”)。 |
lstart |
STARTED |
命令開始的時間。 |
lwp |
LWP |
正在報告的LWP(輕量過程或線程)ID。(別名spid,tid) |
ni |
NI |
nice值,範圍從19(最好)到-20(對他人不友好)。 (別名nice)。 |
nice |
NI |
同ni |
nlwp |
NLWP |
進程中的lwps(線程)數。(別名thcount)。 |
nwchan |
WCHAN |
進程處於休眠狀態的內核函數的地址(如果需要內核函數名稱,請使用wchan)。正在運行的任務將在本列中顯示一個破折號(‘-’)。 |
pcpu |
%CPU |
同%cpu |
pending |
PENDING |
掛起信號的掩碼。進程上掛起的信號不同於單個線程上的待決信號。使用m選項或-m選項查看兩者。根據字段的寬度,以十六進制格式顯示32位或64位掩碼。(別名sig)。 |
pgid |
PGID |
進程組ID或相應的流程組領導的進程ID。(別名pgrp)。 |
pgrp |
PGRP |
同pgid |
pid |
PID |
進程的進程ID號 |
pmem |
%MEM |
同%mem |
policy |
POL |
同cls |
ppid |
PPID |
父進程id |
psr |
PSR |
進程當前分配給的處理器。 |
rgid |
RGID |
真實的組id |
rgroup |
RGROUP |
真正的組名。如果可以獲得並且字段寬度允許,這將是文本組ID,否則將是十進制表示。 |
rip |
RIP |
64位指令指針。 |
rsp |
RSP |
64位棧指針。 |
rss |
RSS |
駐留集大小,任務使用的非交換物理內存(以千字節為單位)。(別名rssize,rsz)。
|
rssize |
RSS |
同rss |
rsz |
RSZ |
同rss |
rtprio |
RTPRIO |
實時優先級 |
ruid |
RUID |
實際用戶ID |
ruser |
RUSER |
真實的用戶ID。如果可以獲得並且字段寬度允許,這將是文本用戶ID,否則將是十進制表示。 |
s |
S |
最小狀態顯示(一個字符)。 |
sched |
SCH |
進程的調度策略。策略SCHED_OTHER(SCHED_Normal)、SCHED_FIFO、SCHED_RR、SCHED_BATCH、SCHED_ISO和SCHED_IDELL分別顯示為0、1、2、3、4和5。 |
sess |
SESS |
會話ID或等效的會話領導的進程ID。(別名session,sid)。 |
sgi_p |
P |
進程當前正在執行的處理器。如果進程當前未運行或無法運行,則顯示“*”。 |
sgid |
SGID |
保存的組ID。(別名svgid) |
sgroup |
SGROUP |
保存的組名。如果可以獲得並且字段寬度允許,這將是文本組ID,否則將是十進制表示。 |
sid |
SID |
同sess |
sig |
PENDING |
同pending |
sigcatch |
CAUGHT |
同caught |
sigignore |
IGNORED |
同ignored |
sigmask |
BLOCKED |
同blocked |
size |
SZ |
如果進程要臟所有可寫頁,然後交換掉,則需要交換大約的交換空間。這個數字很粗糙! |
spid |
SPID |
同lwp |
stackp |
STACKP |
進程堆棧的底部(開始)地址 |
start |
STARTED |
命令開始的時候。如果進程在24小時前啟動,則輸出格式為“hh:mm:ss”,否則為“mmm dd”(其中mmm是三個字母的月份名稱)。 |
start_time |
START |
進程的開始時間或日期。只有進程未啟動的年份(即調用ps的年份)或“mmmdd”(如果進程未在同一天啟動)或“hh:mm”將顯示。 |
stat |
STAT |
多字符進程狀態。有關不同值的含義,請參見處理狀態代碼一節。如果只希望顯示第一個字符,請參見s和state。 |
state |
S |
同s |
suid |
SUID |
保存的用戶ID。(別名svuid)。 |
suser |
SUSER |
保存的用戶名。如果可以獲得並且字段寬度允許,這將是文本用戶ID,否則將是十進制表示。(別名svuser) |
svgid |
SVGID |
同sgid |
svuid |
SVUID |
同suid |
sz |
SZ |
進程核心圖像的物理頁面大小。這包括文本、數據和堆棧空間。當前排除了設備映射;這可能會發生更改。參見vsz和rss。 |
thcount |
THCNT |
同nlwp |
tid |
TID |
同lwp |
time |
TIME |
統計CPU時間,"[DD-]HH:MM:SS"格式。(別名cputime)。 |
tname |
TTY |
控制TY(終端)(別名tt,tty)。 |
tpgid |
TPGID |
進程連接到的TTY(終端)上的前臺進程組的ID,如果進程沒有連接到TTY,則為-1。 |
tt |
TT |
同tname。 |
tty |
TT |
同tname。 |
ucmd |
CMD |
同comm。 |
ucomm |
COMMAND |
同comm。 |
uid |
UID |
同euid。 |
uname |
USER |
同euser。 |
user |
USER |
同euser。 |
vsize |
VSZ |
同vsz。 |
vsz |
VSZ |
進程的虛擬內存大小(1024字節單位)。當前排除了設備映射;這可能會發生更改。(別名vsize)。 |
wchan |
WHAN |
進程處於休眠狀態的內核函數的名稱,如果進程正在運行,則為“-”,如果進程是多線程且ps不顯示線程,則為“*”。 |
11、環境變量
下面的環境變量會影響ps的行為:
COLUMNS,覆蓋默認的寬度。
LINES,覆蓋默認的高度。
PS_PERSONALITY,設置為POSIX中的一個,old,linux,bsd,sun,digital。
CMD_ENV,設置為POSIX中的一個,old,linux,bsd,sun,digital。
I_WANT_A_BROKEN_PS,解釋過時命令。
LC_TIME,日期格式。
PS_COLORS,現在還不支持。
PS_FORMAT,默認輸出格式覆蓋。
PS_SYSMAP,默認名稱列表(System.map)位置。
PS_SYSTEM_MAP,默認名稱列表(System.map)位置。
POSIXLY_CORRECT,不要找借口忽視不好的“特性”。
POSIX2,當設置為“on”時,充當POSIXLY_TRIDER。
UNIX95,不要找借口忽視不好的“特性”。
_XPG,取消CMD_ENV=irix非標準行為。
一般來說,設置這些變量是個壞主意。一個例外是CMD_ENV或PS_PERSONALITY,對於正常系統,可以將它們設置為Linux。如果沒有這種設置,PS就會遵循Unix 98標準中無用的和壞的部分。
12、例子代碼
|
13、實例
1)顯示所有用戶的所有進程信息
|
2)顯示用戶david的進程信息
|
linux基礎命令---顯示進程ps