要查看linux系統(tǒng)中所有正在運行的進程,使用ps aux命令是最直接有效的方式。該命令會列出所有用戶的所有進程,包括后臺服務,并以表格形式展示每個進程的詳細信息,如用戶(user)、進程id(pid)、cpu占用(%cpu)、內存占用(%mem)、虛擬內存大小(vsz)、物理內存使用(rss)、終端關聯(lián)(tty)、進程狀態(tài)(stat)、啟動時間(start)、cpu運行時間(time)以及啟動命令(command)。通過這些字段,你可以識別資源消耗大戶、發(fā)現(xiàn)異常狀態(tài)(如僵尸進程z或不可中斷睡眠d)、判斷進程是否卡死等。為進一步提升效率,可結合管道符與其他命令組合使用:1. ps aux | grep [關鍵詞] 可篩選特定進程;2. ps aux –sort=-%cpu | head -n 10 可按cpu使用降序排列并顯示前10個進程;3. ps aux | less 可實現(xiàn)分頁瀏覽輸出內容。這些操作使ps aux不僅是一個查看工具,更成為系統(tǒng)診斷與性能監(jiān)控的重要起點。
在linux系統(tǒng)里,想要一覽無余地掌握當前所有正在運行的進程,ps aux 命令無疑是你的首選利器。它能提供一個系統(tǒng)所有進程的快照,讓你清楚地看到每個進程的詳細狀態(tài),是系統(tǒng)管理員和開發(fā)者日常排查問題、監(jiān)控系統(tǒng)健康狀況的基石。
解決方案
要查看Linux系統(tǒng)中的所有進程,你只需要在終端中輸入:
ps aux
這個命令會列出當前系統(tǒng)上所有用戶的所有進程,包括那些沒有關聯(lián)到特定終端的后臺進程。輸出內容會以表格的形式展現(xiàn),每一行代表一個進程,每一列則提供了該進程的各項關鍵信息。我個人覺得,這個命令的簡潔性與它所能提供的信息量,簡直是Linux哲學的一個縮影。
ps aux 命令輸出的秘密:每個字段都意味著什么?
當你敲下 ps aux 并按下回車,屏幕上會瞬間涌現(xiàn)出一大堆數(shù)據(jù)。初看可能有些眼花繚亂,但一旦你理解了這些列的含義,它們就會變得異常清晰。我經(jīng)常開玩笑說,這就像是在看一本系統(tǒng)運行的“流水賬”,每一筆都記錄著資源的使用和程序的生命周期。
- USER: 運行該進程的用戶。這很重要,因為你可以一眼看出是哪個用戶在消耗資源,或者是否有非預期的用戶進程在運行。
- PID: 進程ID(Process ID)。每個進程都有一個獨一無二的數(shù)字標識符。這是你后續(xù)操作(比如殺死進程 kill PID)時必須用到的。
- %CPU: 進程占用CPU的百分比。這個值能讓你快速識別出哪些進程是“CPU大戶”,可能是性能瓶頸的源頭。
- %MEM: 進程占用物理內存的百分比。同樣,這是找出內存泄漏或內存密集型應用的關鍵指標。
- VSZ: 虛擬內存大小(Virtual Size)。進程使用的虛擬內存總量,以KB為單位。它包含了代碼、數(shù)據(jù)、共享庫等,不完全等于實際占用的物理內存。
- RSS: 駐留集大小(Resident Set Size)。進程實際占用的物理內存大小,以KB為單位。這個值比VSZ更能反映進程對物理內存的實際需求。
- TTY: 進程關聯(lián)的終端。? 表示進程沒有關聯(lián)到任何終端(通常是后臺服務或守護進程)。pts/0 等則表示偽終端。
- STAT: 進程狀態(tài)。這是一個非常有趣的字段,它用一個或多個字母表示進程的當前狀態(tài),比如:
- R: Running (正在運行或在運行隊列中等待)
- S: Sleeping (可中斷的睡眠狀態(tài))
- D: Uninterruptible sleep (不可中斷的睡眠,通常在等待I/O)
- Z: Zombie (僵尸進程,子進程已終止但父進程尚未回收其資源)
- T: Stopped (被信號停止)
- <: high-priority>
- N: Low-priority (低優(yōu)先級)
- L: Locked pages (有內存頁被鎖定)
- s: Session leader (會話領導者)
- l: Multi-threaded (多線程)
- +: Foreground process group (前臺進程組) 理解這些狀態(tài)對于判斷進程是否正常運行、是否卡死,或者是否需要進一步干預至關重要。
我經(jīng)常會結合這些字段來做判斷,比如看到一個 %CPU 很高但 TIME 卻不長的進程,我就會懷疑它是不是剛啟動就陷入了死循環(huán);或者一個 STAT 長期處于 D 狀態(tài)的進程,那多半是I/O出了問題。
結合管道與篩選:讓 ps aux 變得更強大
ps aux 雖然強大,但當系統(tǒng)進程數(shù)量龐大時,直接輸出會讓人眼花繚亂。這時候,Linux的“管道”和“篩選”能力就派上用場了。這就像給你的望遠鏡裝上了不同的濾鏡,讓你能更精準地聚焦到感興趣的目標。
最常用的,也是我個人最離不開的組合,就是與 grep 命令的配合。比如,我想看看我的nginx服務是不是正常運行,或者有沒有多個Nginx實例:
ps aux | grep nginx
這里 | (管道符) 的作用是把 ps aux 的輸出作為 grep nginx 的輸入。grep nginx 就會從這些輸出中找出所有包含“nginx”字符串的行。通常,你還會看到一行 grep nginx 自身的進程,因為它也在運行。為了排除它,可以加一個 grep -v grep:
ps aux | grep nginx | grep -v grep
這就能幫你精確地找到Nginx相關的進程。
如果你想找出當前消耗CPU最多的前幾個進程,可以這樣做:
ps aux --sort=-%cpu | head -n 10
–sort=-%cpu 會按照CPU使用率降序排列(- 表示降序),然后 head -n 10 只顯示前10行,也就是CPU占用最高的10個進程(包括表頭)。這對于快速定位系統(tǒng)性能瓶頸非常有幫助。同樣,你可以替換成 –sort=-%mem 來查找內存占用大戶。
當輸出非常長,不方便一次性看完時,可以配合 less 或 more 命令進行分頁查看:
ps aux | less
這樣你就可以用上下箭頭滾動,或者用 / 進行搜索,極大地提升了查看效率。這些組合技,讓 ps aux 從一個單純的“查看器”變成了功能強大的“診斷平臺”。
ps aux 的實際價值:系統(tǒng)診斷與故障排查的起點
為什么我們如此頻繁地提及 ps aux?因為它不僅僅是一個命令,它是Linux系統(tǒng)管理員和開發(fā)者進行初步診斷、理解系統(tǒng)行為的起點。很多時候,當一個服務無響應、系統(tǒng)響應變慢,或者某個應用行為異常時,我做的第一件事往往就是 ps aux。
- 快速定位資源占用大戶: 無論是CPU還是內存,ps aux 結合排序命令能迅速指出哪個進程正在“吃”掉大部分資源。這可能是代碼bug,也可能是配置不當,或者是流量激增的正常表現(xiàn),但至少我們有了線索。
- 檢查服務運行狀態(tài): 很多后臺服務(如Web服務器、數(shù)據(jù)庫)即使沒有終端也會持續(xù)運行。ps aux | grep [service_name] 可以立即告訴你它們是否還在運行,以及以什么用戶、什么命令參數(shù)啟動的。
- 發(fā)現(xiàn)異常進程: 有時候,系統(tǒng)可能會出現(xiàn)一些非預期的進程,這可能是入侵的跡象,也可能是某個程序崩潰后留下的僵尸進程。通過 ps aux 全局掃描,可以幫助我們發(fā)現(xiàn)這些“不速之客”。
- 排查死鎖或卡頓: 當一個程序卡死時,它的CPU使用率可能為0(因為它在等待),但它的狀態(tài)(STAT)可能會是 D(不可中斷睡眠),這通常意味著它在等待I/O操作完成,或者陷入了內核級的死鎖。ps aux 能提供這些關鍵的線索。
- 理解進程層級: 雖然 ps aux 不直接顯示進程樹,但結合其輸出,你可以根據(jù) COMMAND 和 PID,以及后續(xù)的 pstree 等命令,逐步構建出進程間的父子關系,這對于理解復雜系統(tǒng)的啟動流程和依賴關系非常有幫助。
可以說,ps aux 就像是系統(tǒng)的一面鏡子,它反射出當前系統(tǒng)最真實、最直接的運行狀態(tài)。掌握它,是你在Linux世界里游刃有余的關鍵一步。