日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux ps -ef命令输出详解,Linux-ps命令学习

發布時間:2023/12/20 linux 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux ps -ef命令输出详解,Linux-ps命令学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于ps命令涉及的內容比較多一些,這里單獨使用一篇文章來介紹使用。使用的系統是:CentOS 7.4.17.08。

ps命令是Process Status的縮寫,用來列出系統中當前運行的進程。使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。ps命令所列出的進行是當前進程的快照,也就是并不是動態的,而是執行該命令時那一時刻進行的狀態。而經常和ps一起結合使用的殺死進程的是kill命令。

在我們的學習中我們知道,Linux的進程狀態一般分為幾種:

R(TASK_RUNNING,可執行狀態),這個進程是可運行的——要么它正在運行,要么在運行隊列中等待運行;

S(TASK_INTERRUPTIBLE,中斷狀態),這個狀態的進程因為等待某事件的發生(比如等待socket連接、等待信號量等)而被掛起,然后當這些事件發生或完成后,對應的等待隊列中的一個或多個進程將被喚醒。

D(TASK_UNINTERRUPTIBLE,不可中斷狀態),在進程接收到信號時,不會被喚醒變成可運行的。除了這一點,該狀態和TASK_INTERRUPTIBLE其他部分完全一樣,這個狀態通常用于進程必須不間斷等待或者事件發生的頻率很快,并且無法用kill命令關閉處于TASK_UNINTERRUPTIBLE狀態的進程。

T(TASK_STOPPED或TASK_TRACED,暫停狀態或跟蹤狀態),該狀態表示該進程已經停止執行,并且不具有再次執行的條件。向進程發送一個SIGSTOP信號,它就會因響應該信號而進入TASK_STOPPED狀態(除非該進程本身處于TASK_UNINTERRUPTIBLE狀態而不響應信號)。而當進程正在被跟蹤時,它處于TASK_TRACED狀態。

Z(TASK_DEAD或EXIT_ZOMBIE,退出狀態),進程在退出的過程中,處于TASK_DEAD狀態,如果它的父進程沒有收到SIGCHLD信號,故未調用wait(如wait4、waitid)處理函數等待子進程結束,又沒有顯式忽略該信號,它就一直保持EXIT_ZOMBIE狀態。只要父進程不退出,這個EXIT_ZOMBIE狀態的子進程就一直存在,這也就是所謂的"僵尸"進程。

X(TASK_DEAD - EXIT_DEAD,退出狀態),進程即將被銷毀。EXIT_DEAD狀態是非常短暫的,幾乎不可能通過ps命令捕捉到。

而PS對應上的狀態碼大致如下:

狀態

定義

R

Running.運行中

S

Interruptible Sleep.等待調用

D

Uninterruptible Sleep.等待磁盤IO

T

Stoped.暫停或者跟蹤狀態

X

Dead.即將被撤銷

Z

Zombie.進程已經結束,僅映像名留存,所謂的僵尸進程

W

Paging.內存交換

N

優先級低的進程

<

優先級高的進程

s

進程的領導者

L

鎖定狀態

l

多線程狀態

+

前臺進程

而我們最常見的三種狀態就是R,S,D。ps命令支持三種使用的語法格式:

UNIX 風格,選項可以組合在一起,并且選項前必須有“-”連字符;

BSD 風格,選項可以組合在一起,但是選項前不能有“-”連字符;

GNU 風格的選項,選項前有兩個“-”連字符;

接下來我們來看一下PS命令常用的參數:

ps -a 顯示所有終端下執行的進程,包含其他用戶的進程

ps -A 顯示所有進程

ps -e 和-A功能一樣

ps -H 顯示樹狀結構,表示程序間的相互關系

ps -f 全格式顯示進程

ps a 顯示當前終端下執行的進程

ps c 顯示進程的真實名稱

ps e 列出程序所使用的環境變量

ps f 用ASCII字符顯示樹狀結構,表達程序間的相互關系

ps x 顯示所有進程,無論是否運行在終端上

ps u 顯示用戶相關的進程或者與用戶相關的屬性

ps r 只顯示正在運行的進程

這里,我們只簡單列出了幾個常用的命令,由于ps作為一個最古老的展示線程相關的命令,所擁有的參數特別多,并且加不加-也有很大的區別,所以接下來我們結合工作中常用的命令來學習它的參數。而我們也可以通過man ps來學習ps所有的命令:

不加參數執行ps命令:展示當前終端中運行的進程情況,很少使用。

[mrzhang@192 ~]$ ps

PID TTY TIME CMD

2648 pts/0 00:00:01 bash

8669 pts/0 00:00:00 ps

默認展示了4列信息:

PID: 運行著的命令(CMD)的進程編號

TTY: 命令所運行的位置(終端)

TIME: 運行著的該命令所占用的CPU處理時間

CMD: 該進程所運行的命令

顯示所有當前的進程:使用 -a 參數,-a 代表 all。同時加上x參數會顯示沒有控制終端的進程,x參數表示顯示所有進程,無論是否運行在終端上。

[mrzhang@192 ~]$ ps -ax

該命令返回的結果會很長,為了方便查看,我們可以結合less命令和管道來使用:

[mrzhang@192 ~]$ ps -ax | less

根據用戶過濾進程:在需要查看特定用戶進程的情況下,我們可以使用 -u 參數。比如我們要查詢某個用戶下的進程:

[mrzhang@192 ~]$ ps -u zhang

通過CPU和內存使用來過濾進程:也許你想看下當前時間點那個進程占用的資源最多,這種情況下,我們可以通過使用-aux命令來顯示全面的信息:

[mrzhang@192 ~]$ ps -aux | less

默認的結果是沒有排序的,這時候可以通過--sort參數來排序:

[mrzhang@192 ~]$ ps -aux --sort -%cpu | less

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

mrzhang 2011 3.6 3.1 2368492 121944 ? Sl 21:01 0:12 /usr/bin/gnome-shell

mrzhang 2572 3.2 5.5 2146148 211300 ? Sl 21:02 0:09 /usr/lib64/firefox/firefox

root 1519 1.2 1.1 286208 45584 tty1 Ssl+ 21:01 0:04 /usr/bin/X :0 -background none -noreset -audit 4

看一下返回的幾列信息:

USER,用戶名稱;

PID,進程號;

%CPU,該進程所占用CPU百分比;

%MEM,該進程所占用內存百分比;

VSZ,進程所占用的虛擬內存大小;

RSS,進程所占用的實際內存大小;

TTY,該進程運行在哪個終端上面,若與終端無關,則顯示 ?;

STAT,進程狀態;

START,進程啟動時間;

TIME,進程實際占用CPU的時間;

COMMAND,該進程對應的執行程序;

ps命令的排序格式是:--sort=[+|-] key,key表示某一列的名稱,+表示升序排序,而-表示降序排序,比如按CPU降序排列:ps aux --sort=-%cpu,按照內存來進行降序排序:$ ps -aux --sort -%mem | less,我們還可以借助管道只顯示前5條記錄結果,也就是內存占有率最高的前5個進程:

[mrzhang@192 ~]$ ps -aux --sort %mem | head -n 5

而ps排序的方式還有另一種:ps+sort,通過設置sort的參數來進行排序,例如:

[mrzhang@192 ~]$ ps -eo rss,args | sort -k 1 -r -n | less

該方式的一些參數如下:

-f 忽略大小寫的差異,例如 A 與 a 視為編碼相同;

-b 忽略最前面的空格符部分;

-M 以月份的名字來排序,例如 JAN, DEC 等等的排序方法;

-n 使用『純數字』進行排序(默認是以文字型態來排序的);

-r 反向排序;

-u 就是 uniq ,相同的數據中,僅出現一行代表;

-t 分隔符,默認是用 [tab] 鍵來分隔;

-k 以那個區間 (field) 來進行排序的意思

根據進程名和PID來過濾,通過使用-C參數,后面跟上進程名,比如像顯示一個名稱是getty的進程的信息,可以使用:

[mrzhang@192 ~]$ ps -C bash

PID TTY TIME CMD

2686 pts/0 00:00:00 bash

根據進程查看線程,如果我們像知道特定線程的進程,可以使用-L參數,后面加上對應的進程的PID:

[mrzhang@192 ~]$ ps -L 2011

PID LWP TTY STAT TIME COMMAND

2011 2011 ? Sl 0:25 /usr/bin/gnome-shell

2011 2012 ? Sl 0:00 /usr/bin/gnome-shell

2011 2014 ? Sl 0:00 /usr/bin/gnome-shell

2011 2015 ? Sl 0:00 /usr/bin/gnome-shell

2011 2028 ? Sl 0:00 /usr/bin/gnome-shell

2011 2029 ? Sl 0:00 /usr/bin/gnome-shell

樹形顯示進程,可以通過參數f來實現:ps -axf,也可以使用pstree命令;

[mrzhang@192 ~]$ ps -axf

1773 ? Sl 0:00 \_ gdm-session-worker [pam/gdm-password]

1791 ? Ssl 0:00 \_ /usr/libexec/gnome-session-binary --session g

1965 ? Ss 0:00 \_ /usr/bin/ssh-agent /bin/sh -c exec -l /bi

2011 ? Sl 0:29 \_ /usr/bin/gnome-shell

2031 ? Sl 0:00 | \_ ibus-daemon --xim --panel disable

2036 ? Sl 0:00 | \_ /usr/libexec/ibus-dconf

2267 ? Sl 0:00 | \_ /usr/libexec/ibus-engine-simple

2162 ? Sl 0:03 \_ /usr/libexec/gnome-settings-daemon

查看登入服務器的其他用戶信息,可以使用:$ ps -eo pid,user,args,-e表示顯示所有進程信息,o用于參數控制輸出,pid,user,args是相應的用戶的展示信息。

使用ps命令來實時監控進程的狀態,一般情況下ps命令的結果是靜態的,也就是命令執行時的狀態,不過我們可以通過watch命令和ps命令一起來實現。比如我們想通過CPU或者內存的使用率來篩選前10條進程,并且每1秒刷新一次:

[mrzhang@192 ~]$ watch -n 1 'ps -aux --sort -%mem | head 10'

Every 1.0s: ps -aux --sort -%mem | head -n 10

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

mrzhang 2011 3.6 3.1 2368492 121944 ? Sl 21:01 0:12 /usr/bin/gnome-shell

mrzhang 2572 3.2 5.5 2146148 211300 ? Sl 21:02 0:09 /usr/lib64/firefox/firefox

root 1519 1.2 1.1 286208 45584 tty1 Ssl+ 21:01 0:04 /usr/bin/X :0 -background none -noreset -audit 4

...省略

這里,我們可以充分利用ps命令的一些參數,實現自定義顯示我們所需要的一些字段等,比如我們只想查看某一個用戶的信息:

[mrzhang@192 ~]$ watch -n 1 'ps -U mrzhang u --sort -%mem | head 10'

Every 1.0s: ps -U mrzhang u --sort -%mem | head -n 10

...

我們還可以配合grep查找命令來進行查找一些特定的線程,比如我們要根據我們的服務名來查找對應的進程:

[mrzhang@192 ~]$ ps -aux | grep 服務名

把進程顯示出來,并打印到相應文件中:

[mrzhang@192 ~]$ ps -aux > ps001.txt

備注

ps的命令十分強大,參數也十分多,這里我們只了解了一些常用的操作所涉及到的命令,其實還有許多命令,我們可以通過man ps來了解并學習。

總結

以上是生活随笔為你收集整理的linux ps -ef命令输出详解,Linux-ps命令学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。