1. 程式人生 > >linux基礎命令---顯示進程ps

linux基礎命令---顯示進程ps

連接 printf 現在 proc nes ... cor 獲得 cps

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

命令名(只有可執行的名稱)。將不會顯示對命令名的修改。標記為“已失效”的進程部分死亡,等待其父進程完全銷毀。該列中的輸出可能包含空格。(別名ucmducomm)。

當最後指定該列時,該列將擴展到顯示的邊緣。如果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選項可用於強制十進制表示。(別名unameuser)。

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。(別名spidtid)

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

駐留集大小,任務使用的非交換物理內存(以千字節為單位)。(別名rssizersz)。

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。(別名sessionsid)。

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

多字符進程狀態。有關不同值的含義,請參見處理狀態代碼一節。如果只希望顯示第一個字符,請參見sstate

state

S

同s

suid

SUID

保存的用戶ID。(別名svuid)。

suser

SUSER

保存的用戶名。如果可以獲得並且字段寬度允許,這將是文本用戶ID,否則將是十進制表示。(別名svuser)

svgid

SVGID

sgid

svuid

SVUID

suid

sz

SZ

進程核心圖像的物理頁面大小。這包括文本、數據和堆棧空間。當前排除了設備映射;這可能會發生更改。參見vszrss

thcount

THCNT

nlwp

tid

TID

lwp

time

TIME

統計CPU時間,"[DD-]HH:MM:SS"格式。(別名cputime)。

tname

TTY

控制TY(終端)(別名tttty)。

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、例子代碼

若要使用標準語法查看系統上的每個進程,請執行以下操作:

ps -e

ps -ef

ps -eF

ps –ely

若要使用BSD語法查看系統上的每個進程,請執行以下操作:

ps ax

ps ax

打印進程樹

ps -ejH

ps axjf

獲取線程信息

ps -eLf

ps axm

獲取安全信息

ps -eo euser,ruser,suser,fuser,f,comm,label

ps axZ

ps –eM

若要以用戶格式將每個進程作為根進程運行(實際有效ID),請執行以下操作:

ps -U root -u root

要使用用戶定義的格式查看每個進程:

ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm

ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm

ps -eopid,tt,user,fname,tmout,f,wchan

只打印進程sislogdPID

ps -C syslogd -o pid=

只打印PID42的進程名字

ps -p 42 -o comm=

13、實例

1)顯示所有用戶的所有進程信息

[root@localhost ~]# ps -aux

Warning: bad syntax, perhaps a bogus ‘-‘? See /usr/share/doc/procps-3.2.8/FAQ

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 2900 1504 ? Ss Sep19 0:00 /sbin/init

root 2 0.0 0.0 0 0 ? S Sep19 0:00 [kthreadd]

root 3 0.0 0.0 0 0 ? S Sep19 0:00 [migration/0]

root 4 0.0 0.0 0 0 ? S Sep19 0:02 [ksoftirqd/0]

root 5 0.0 0.0 0 0 ? S Sep19 0:00 [migration/0]

root 6 0.0 0.0 0 0 ? S Sep19 0:02 [watchdog/0]

。。。

david 7226 0.0 0.1 50856 3020 ? Sl 06:32 0:00 /usr/bin/gnome-keyring-daemon --dae

david 7238 0.0 0.3 32944 6244 ? Ssl 06:32 0:00 gnome-session

david 7246 0.0 0.0 3664 760 ? S 06:32 0:00 dbus-launch --sh-syntax --exit-with

david 7247 0.0 0.0 3396 1316 ? Ss 06:32 0:00 /bin/dbus-daemon --fork --print-pid

david 7306 0.0 0.0 19200 364 ? S 06:32 0:00 /usr/bin/VBoxClient --display

david 7308 0.0 0.0 19200 1080 ? S 06:32 0:00 /usr/bin/VBoxClient --display

david 7312 0.0 0.0 19200 360 ? S 06:32 0:00 /usr/bin/VBoxClient --seamless

david 7314 0.0 0.0 20884 1188 ? Sl 06:32 0:00 /usr/bin/VBoxClient --seamless

david 7318 0.0 0.0 19200 360 ? S 06:32 0:00 /usr/bin/VBoxClient --draganddrop

david 7320 0.1 0.0 21400 1296 ? Sl 06:32 0:07 /usr/bin/VBoxClient --draganddrop

david 7343 0.0 0.2 10712 4624 ? S 06:32 0:00 /usr/libexec/gconfd-2

。。。

2)顯示用戶david的進程信息

[root@localhost ~]# ps -u david

PID TTY TIME CMD

7226 ? 00:00:00 gnome-keyring-d

7238 ? 00:00:00 gnome-session

7246 ? 00:00:00 dbus-launch

7247 ? 00:00:00 dbus-daemon

7306 ? 00:00:00 VBoxClient

linux基礎命令---顯示進程ps