Linux進程之如何查看進程詳情?

2020-12-23 計算機java編程

1、ps是什麼?

有時候我們需要對作業系統的當前進程進行監測和控制,這時候我們需要查看當前進程,以此了解當前進行的情況,這個時候我們就需要使用到ps命令,ps命令就是一種最基本的進程查看命令。使用改命令可以查看當前有哪些進程正在運行和運行狀態、進程是否結束,有沒有殭屍進程,進行資源佔用情況等等,通過該命令可以看到進程的大部分信息。

ps是顯示瞬間進程的狀態,並不動態連續;如果想對進程進行實時監控應該用top命令。

基本參數:

-A :所有的進程均顯示出來,與 -e 具有同樣的效用;-a :顯示現行終端機下的所有進程,包括其他用戶的進程;-u :以用戶為主的進程狀態 ;x :通常與 a 這個參數一起使用,可列出較完整信息。輸出格式規劃:

l :較長、較詳細的將該PID 的的信息列出;j :工作的格式 (jobs format)-f :做一個更為完整的輸出。下面我們就對該命令進行實操,看一下不同參數都有哪些效果。

2、不加參數執行ps命令會輸出什麼?

這是ps命令最基本的使用方式,下圖是在控制臺執行ps後的輸出結果。

結果默認會顯示4列信息,下面分別解釋一下這4列的含義:

PID: 運行著的命令(CMD)的進程編號TTY: 命令所運行的位置(終端)TIME: 運行著的該命令所佔用的CPU處理時間CMD: 該進程所運行的命令這些信息在顯示時未排序。

3、如何顯示所有當前進程?

-a參數,-a 代表 all

-x 參數會顯示沒有控制終端的進程。

故我們向下面這樣使用:

$ ps -ax

執行後結果形如下圖:

# 這個命令執行結果可能很長,不方便查看,這時可以結合less命令和管道來使用。

使用方式如下:

$ ps -ax | less

4. 如何根據進程的用戶進行信息過濾呢?

在某些情況下我們需要查看特定用戶下的進程情況,我們可以使用 -u參數。

比如我們要查看用戶'pungki'的進程,可以通過下面的命令:

$ ps -u pungki

5、如何通過cpu和內存使用來過濾進程?

有時候我們需要查看哪些進程佔用了你的資源,就需要將結果按照CPU或者內存用量來進行篩選。要做到這一點我們可以結合aux參數來顯示全面的信息。

使用方式如下:

$ ps -aux | less

默認的結果集是未排好序的。可以通過 --sort命令來排序。

5.1 根據CPU使用率來升序排序

$ ps -aux --sort -pcpu | less

5.2 根據內存使用率來升序排序

$ ps -aux --sort -pmem | less

5.3 我們也可以將它們合併到一個命令,並通過管道顯示前10個結果:

$ ps -aux --sort -pcpu,+pmem | head -n 10

6、如何通過進程名和PID進行過濾呢?

如果我們要根據進程的名字來查看進行,可以使用 -C參數,後面跟你要找的進程的名字。比如想顯示一個名為getty的進程的信息,就可以使用下面的命令。使用方式如下:

$ ps -C getty

如果想要看到更多的細節,我們可以使用-f參數來查看格式化的信息列表:

$ ps -f -C getty

7、如何根據線程來過濾進程呢?

有時候我們需要查看指定進程的線程,這時候可以使用 -L參數,後面加上特定的PID。使用方式如下:

$ ps -L 1213

8、如何樹形的顯示進程?

有時候希望以某種特定的格式顯示進程信,可以使用 -axjf參數。使用方式如下:

$ ps -axjf

或者可以使用另一個命令。

$ pstree

9. 如何顯示安全信息?

有時候我們需要知道當前都有誰登錄你的伺服器,可以使用ps命令加上相關參數:

$ ps -eo pid,user,args

參數 -e顯示所有進程信息,-o 參數控制輸出。Pid,UserArgs參數顯示PID,運行應用的用戶該應用

能夠與 -e參數 一起使用的關鍵字是args, cmd, comm, command, fname, ucmd, ucomm, lstart, bsdstart 和 start

10. 如何格式化輸出root用戶(真實的或有效的UID)創建的進程?

系統管理員想要查看由root用戶運行的進程和這個進程的其他相關信息時,可以通過下面的命令:

$ ps -U root -u root u

-U參數按真實用戶ID(RUID)篩選進程,它會從用戶列表中選擇真實用戶名或 ID。真實用戶即實際創建該進程的用戶。

-u參數用來篩選有效用戶ID(EUID)。

最後的 u參數用來決定以針對用戶的格式輸出,由User, PID, %CPU, %MEM, VSZ, RSS, TTY, STAT, START, TIME 和 COMMAND這幾列組成。

這裡有上面的命令的輸出結果:

11. 如何使用PS實時監控進程狀態?

ps 命令會顯示你系統當前的進程狀態,但是這個結果是靜態的。

當有一種情況,我們需要像上面第四點中提到的通過CPU和內存的使用率來篩選進程,並且我們希望結果能夠每秒刷新一次。

要滿足這個需求我們可以將ps命令和watch命令結合起來。使用方式如下:

$ watch -n 1 『ps -aux --sort -pmem, -pcpu』

如果輸出的內容太長太多,我們需要去限制它,比如要前20條,這時候我們再結合head命令來達到此效果。

$ watch -n 1 『ps -aux --sort -pmem, -pcpu | head 20』

這裡的動態查看並不像top或者htop命令一樣。但是使用ps的好處是你能夠定義顯示的欄位,你能夠選擇你想查看的欄位。

舉個例子,如果你只需要看名為'pungki'用戶的信息,你可以使用下面的命令:

$ watch -n 1 『ps -aux -U pungki u --sort -pmem, -pcpu | head 20』

12、最後

你也許每天都會使用ps命令來監控你的Linux系統。但是事實上,你可以通過ps命令的參數來生成各種你需要的報表。

ps命令的另一個優勢是ps是各種 Linux系統都默認安裝的,因此你只要用就行了。不要忘了通過 man ps來查看更多的參數。

相關焦點

  • Linux 進程管理之四大名捕!
    本文四大名捕由 linux 命令所出演:無情:ps 出演鐵手:dstat 出演追命:top 出演冷血:htop 出演二、進程相關基礎知識(查看大圖)三、輕功暗器高手「無情」 [PS]ps:用於顯示當前進程的狀態(非動態)ps [options]:選項有三種風格:1、UNIX風格,必須在選項前面加「-
  • linux實戰案例-快速查找和刪除進程的方法
    #linux知識匯總與分享#1、查看全部運行進行常用的兩個命令(一)ps -ef|head -1結果說明:UID: 用戶ID用戶名PID:進程IDPPID:父進程idC :當前進程佔用CPU的比例STIME:進程啟動時間TTY:進程運行的終端信息,無終端的為?
  • Linux應用編程之進程的PID與PPID
    進程PID是當作業系統運行進程時系統自動為其分配的唯一標識符,用於唯一標識此進程的一個整數,而PPID就是進程的父進程的PID。 既然是唯一標識,PID也就相當於我們的身份證,一旦被發放即終生標識,這也便於作業系統更好的管理和標識進程,當然一旦進程生命周期結束,此時的PID便會被釋放,可供以後的進程再次使用。
  • linux多進程
    關於進程概念相關的內容請打開連結,本文所介紹的是進程的POSIX標準。進程的關係       Linux中的所有進程都是相互聯繫的,進程之間的的從屬關係有父/子關係和兄/弟關係。       Linux內核創建了進程標號為0以及進程標號為1的進程。
  • 如何在Windows系統查看加載了指定DLL動態連結庫的進程
    我們大家在運維管理Windows計算機系統時,為了安全起見,有時可能需要查看一些加載了指定的DLL動態連結庫文件的進程有哪些。那麼,我們該如何操作處理呢?接下來,小編就來演示一下具體的操作步驟。第四步:打開cmd窗口,運行Listdlls64.exe --help指令,查看Listdlls64.exe應用程式的幫助用法。
  • Linux系統如何查看服務的運行狀態
    前言本文主要講解如何在Linux系統上查看服務的運行狀態。Linux系統提供各種系統服務(如進程管理、登錄服務、日誌、計劃任務等)和網絡服務(如遠程登錄、電子郵件、印表機、web主機、數據存儲、文件傳輸、域名解析(使用DNS)、動態IP位址分配(使用DHCP)等等)。
  • vim+py文件構造linux後門
    那我們就得考慮,如何啟動的時候就不顯示該窗口。這裡我們可以使用linux中nohup功能,用來將命令進行後臺執行。具體實現方式如下:1、通過netstat命令,查詢到該進程號為1861;2、創建一個空文件夾「null」;3、使用命令「mount --bind null /proc/1861」經過這3步,已經成功隱藏了進程名和進程ID,通過netstat和ps命令,均無法查看到進程名與進程ID
  • Centos linux系統中殺死進程的方法
    在工作中,我常常需要終止有問題的進程,一般通過程序的關閉命令把進程關閉掉,這是最安全的方法,但是有些時候,我們無法通過關閉命令把進程結束掉,這時就需要通過殺死進程的方法來結束這個有問題的進程。而殺進程的方法有很多,常見的有kill、killall、pkill等。
  • Linux進程間通信的socketpair()函數
    文件描述符,屬於進程的資源之一,與進程的變量、代碼類似,都會在fork()時被父子進程共享。所以,socketpair()這個函數就被master+worker型的多進程伺服器廣泛用於master和各個worker的通信。
  • Nginx專題之-父子進程的架構(打虎親兄弟worker,上陣父子兵)
    Nginx專題之-請求處理流程的架構(你從哪裡來,又到哪裡去)。具體有四個功能:接受來自外界的信號、向各worker進程發送信號、監控worker進程的運行狀態、當worker進程退出後(異常情況下),會自動重新啟動新的worker進程。多個子進程:一類是worker進程(會有很多),一類cache進程(Cache Manager和Cache Loader)。
  • 該如何學習學進程和線程 下
    對於接收者來說,如何區分新的消息和一條重發的老消息是非常重要的。通常採用在每條原始消息中嵌入一個連續的序號來解決此問題。如果接受者收到一條消息,它具有與前面某一條消息一樣的序號,就知道這條消息是重複的,可以忽略。消息系統還必須處理如何命名進程的問題,以便在發送或接收調用中清晰的指明進程。
  • 如何給正在運行的Linux應用程式注入代碼
    .2…done.Loaded symbols for /lib/ld-linux.so.20×00464410 in __kernel_vsyscall ()(gdb)5、將注入代碼加載到可執行程序的內存中如前所述,目標文件injection.o初始並不包含在app可執行進程鏡像中,我們首先需要將
  • Android進程間通信
    夏雨 的博客地址:http://blog.csdn.net/yulyu進程間通信(Inter-Process Communication),簡稱 IPC,就是指進程與進程之間進行通信.一般來說,一個app只有一個進程,但是可能會有多個線程,所以我們用得比較多的是多線程通信,比如 Handler,AsyncTask.
  • 從串口驅動到Linux驅動模型,想轉Linux的必會!
    /linux/kernel 中您可以找到 SCI 的實現,並在 ./linux/arch 中找到依賴於體系結構的部分。進程管理進程管理的重點是進程的執行。在內核中,這些進程稱為線程,代表了單獨的處理器虛擬化(線程代碼、數據、堆棧和 CPU寄存器)。在用戶空間,通常使用進程這個術語,不過 Linux 實現並沒有區分這兩個概念(進程和線程)。
  • 一個埠號可以同時被兩個進程綁定嗎?
    根據埠號的綁定我們分以下幾種情況來討論:2個進程分別建立TCP server,使用同一個埠號88882個進程分別建立UDP server,使用同一個埠號88882個進程1個建立TCP server、1個建立UDP server,都使用埠號88881.
  • Linux系統下Java通過shell腳本監控重啟服務
    思路 java程序獲取linux進程信息可以通過shell腳本獲取進程信息、通過讀取proc文件系統獲取進程信息。 但是為了系統的安全性、方便維護等角度出發,更多的是java通過shell獲取和linux交互能力。
  • Linux 環境下安裝 MySQL,各種踩坑、疑難雜症|原力計劃
    首先安裝 mysql 之前首先查看一下本機是否已經安裝了 mysqlrpm -qa | grep -i mysql如果有則強制刪除rpm -e mysql-libs --nodeps3.然後在進行安裝 mysql// 先安裝服務端rpm -ivh MySQL-server-5.5.48-1.linux2.6.i386.rpm // 在安裝客戶端rpm -ivh MySQL-client-5.5.48-1.linux2.6
  • 記一次優化Linux伺服器swap內存過高問題 - 51CTO.COM
    2.查看佔用swap過高的進程正常情況下swap的使用應該是0,所以swap剩餘小於80%時,我們便需要關注是哪個進程佔用過高。通過以下命令查看佔用swap過高的進程:for i in `cd /proc;ls |grep "^[0-9]"|awk ' $0 >100'` ;do awk '/Swap:/{aa=a+$2
  • 「正點原子Linux連載」第五十二章Linux阻塞和非阻塞IO實驗
    本章我們就來學習一下阻塞和非阻塞IO,以及如何在驅動程序中處理阻塞與非阻塞,如何在驅動程序使用等待隊列和poll機制。52.1 阻塞和非阻塞IO52.1.1 阻塞和非阻塞簡介這裡的「IO」並不是我們學習STM32或者其他單片機的時候所說的「GPIO」(也就是引腳)。
  • 嵌入式Linux啟動時間優化的秘密之一工具鏈/應用程式優化
    此時如何加快Linux的啟動,將成為一個挑戰,對於大多數應用開發人員而言,由於Linux系統的複雜性,對於如何提高啟動速度,往往無從下手。那麼閱讀完本文,將獲得清晰完整的解決思路。   1.降低啟動時間的一般思路   在準備降低系統的啟動時間時,思路上應建立以下的切入點:   最快的代碼是未執行的代碼。