Linux ps命令詳解:查看正在運行的進程

2021-02-20 Python大師

ps 命令是最常用的監控進程的命令,通過此命令可以查看系統中所有運行進程的詳細信息。

ps 命令有多種不同的使用方法,這常常給初學者帶來困惑。在各種 Linux 論壇上,詢問 ps 命令語法的帖子屢見不鮮,而出現這樣的情況,還要歸咎於 UNIX 悠久的歷史和龐大的派系。在不同的 Linux 發行版上,ps 命令的語法各不相同,為此,Linux 採取了一個折中的方法,即融合各種不同的風格,兼顧那些已經習慣了其它系統上使用 ps  命令的用戶。

ps 命令的基本格式如下:

[root@localhost ~]# ps aux
#查看系統中所有的進程,使用 BS 作業系統格式
[root@localhost ~]# ps -le
#查看系統中所有的進程,使用 Linux 標準命令格式

選項:

a:顯示一個終端的所有進程,除會話引線外;

u:顯示進程的歸屬用戶及內存的使用情況;

x:顯示沒有控制終端的進程;

-l:長格式顯示更加詳細的信息;

-e:顯示所有進程;

可以看到,ps 命令有些與眾不同,它的部分選項不能加入"-",比如命令"ps aux",其中"aux"是選項,但是前面不能帶「-」。

大家如果執行 "man ps" 命令,則會發現 ps 命令的幫助為了適應不同的類 UNIX 系統,可用格式非常多,不方便記憶。所以,我建議大家記憶幾個固定選項即可。比如:


有這三個命令就足夠了,下面分別來查看。

【例 1】

[root@localhost ~]# ps aux
#查看系統中所有的進程
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.2 2872 1416 ? Ss Jun04 0:02 /sbin/init
root 2 0.0 0.0 0 0 ? S Jun04 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Jun04 0:00 [migration/0]
root 4 0.0 0.0 0 0 ? S Jun04 0:00 [ksoftirqd/0]
…省略部分輸出…

表 1 中羅列出了以上輸出信息中各列的具體含義。

表 1 ps命令輸出信息含義表頭含義USER該進程是由哪個用戶產生的。PID進程的 ID。%CPU該進程佔用 CPU 資源的百分比,佔用的百分比越高,進程越耗費資源。%MEM該進程佔用物理內存的百分比,佔用的百分比越高,進程越耗費資源。VSZ該進程佔用虛擬內存的大小,單位為 KB。RSS該進程佔用實際物理內存的大小,單位為 KB。TTY該進程是在哪個終端運行的。其中,tty1 ~ tty7 代表本地控制臺終端(可以通過 Alt+F1 ~ F7 快捷鍵切換不同的終端),tty1~tty6 是本地的字符界面終端,tty7 是圖形終端。pts/0 ~ 255 代表虛擬終端,一般是遠程連接的終端,第一個遠程連接佔用 pts/0,第二個遠程連接佔用 pts/1,依次増長。STAT進程狀態。常見的狀態有以下幾種:

-D:不可被喚醒的睡眠狀態,通常用於 I/O 情況。

-R:該進程正在運行。

-S:該進程處於睡眠狀態,可被喚醒。

-T:停止狀態,可能是在後臺暫停或進程處於除錯狀態。

-W:內存交互狀態(從 2.6 內核開始無效)。

-X:死掉的進程(應該不會出現)。

-Z:殭屍進程。進程已經中止,但是部分程序還在內存當中。

-<:高優先級(以下狀態在 BSD 格式中出現)。

-N:低優先級。

-L:被鎖入內存。

-s:包含子進程。

-l:多線程(小寫 L)。

-+:位於後臺。

START該進程的啟動時間。TIME該進程佔用 CPU 的運算時間,注意不是系統時間。COMMAND產生此進程的命令名。


【例 2】"ps aux"命令可以看到系統中所有的進程,"ps -le"命令也能看到系統中所有的進程。由於 "-l" 選項的作用,所以 "ps -le" 命令能夠看到更加詳細的信息,比如父進程的 PID、優先級等。但是這兩個命令的基本作用是一致的,掌握其中一個就足夠了。

[root@localhost ~]# ps -le
F S UID PID PPID C PRI Nl ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 718 - ? 00:00:02 init
1 S 0 2 0 0 80 0 - 0 - ? 00:00:00 kthreadd
1 S 0 3 2 0 -40 - - 0 - ? 00:00:00 migration/0
1 S 0 4 2 0 80 0 - 0 - ? 00:00:00 ksoflirqd/0
1 S 0 5 2 0 -40 - - 0 - ? 00:00:00 migration/0
…省略部分輸出…

表 2 羅列出以上輸出信息中各列的含義。

表 2 ps -le 命令輸出信息表頭含義F進程標誌,說明進程的權限,常見的標誌有兩個:

1:進程可以被複製,但是不能被執行;

4:進程使用超級用戶權限;

S進程狀態。具體的狀態和"psaux"命令中的 STAT 狀態一致;UID運行此進程的用戶的 ID;PID進程的 ID;PPID父進程的 ID;C該進程的 CPU 使用率,單位是百分比;PRI進程的優先級,數值越小,該進程的優先級越高,越早被 CPU 執行;NI進程的優先級,數值越小,該進程越早被執行;ADDR該進程在內存的哪個位置;SZ該進程佔用多大內存;WCHAN該進程是否運行。"-"代表正在運行;TTY該進程由哪個終端產生;TIME該進程佔用 CPU 的運算時間,注意不是系統時間;CMD產生此進程的命令名;


【例 3】如果不想看到所有的進程,只想查看一下當前登錄產生了哪些進程,那只需使用 "ps -l" 命令就足夠了:

[root@localhost ~]# ps -l
#查看當前登錄產生的進程
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 18618 18614 0 80 0 - 1681 - pts/1 00:00:00 bash
4 R 0 18683 18618 4 80 0 - 1619 - pts/1 00:00:00 ps

可以看到,這次從 pts/1 虛擬終端登錄,只產生了兩個進程:一個是登錄之後生成的 Shell,也就是 bash;另一個是正在執行的 ps 命令。

我們再來說說殭屍進程。殭屍進程的產生一般是由於進程非正常停止或程序編寫錯誤,導致子進程先於父進程結束,而父進程又沒有正確地回收子進程,從而造成子進程一直存在於內存當中,這就是殭屍進程。

殭屍進程會對主機的穩定性產生影響,所以,在產生殭屍進程後,一定要對產生殭屍進程的軟體進行優化,避免一直產生殭屍進程;對於已經產生的殭屍進程,可以在查找出來之後強制中止。

相關焦點

  • Ansible 教程:簡單 Ansible 命令介紹 | Linux 中國
    在這個 Ansible 教程中,我們將學習一些基本的 Ansible 命令的例子,我們將用它來管理基礎設施。所以讓我們先看看一個完整的 Ansible 命令的語法:$ ansible <group> -m <module> -a <arguments>在這裡,我們可以用單個主機或用 <group> 代替一組主機,<arguments> 是可選的參數。
  • 每日學習:Linux文件壓縮與備份常用命令
    bzip2命令用於創建和管理(包括解壓縮)「.bz2」格式的壓縮包。我們遇見Linux壓縮打包方法有很多種,以下講解了Linux壓縮打包方法中的Linux bzip2命令的多種範例供大家查看,相信大家看完後會有很多收穫。1.4.1語法
  • 好消息:FydeOS支持Linux桌面程序運行環境
    此前發布的公測版,FydeOS採用Linux Container的方式融入安卓運行環境,是全球第一款能穩定運行安卓程序的Chromium OS公測版。日前發布的新版本中,FydeOS增加了對 Linux 桌面程序運行環境的支持,用戶可以在FydeOS公測版上同時運行網頁程序、安卓程序和GUI的Linux程序,更接近原生Chrome OS的用戶體驗。
  • 綜合進程管理器(wmip)
    ,請查看以上信息以手動執行判斷。"「 1 > nul」;" << endl; cout << "\t若您希望分屏查看該命令行幫助,請鍵入「wmip /?代表一個字符,「*」代表不定數目(含 0 )個字符;" << endl; cout << "\t本程序在執行樹操作時,不認為進程 System(PID = 4)是進程 System Idle Process(PID = 0)的父進程;" << endl; cout << "\t若命令行包含特殊字符,請依照命令行規則進行轉義,同時,請參閱「/
  • 基礎貼:教你在Linux中更改MAC地址
    使用macchanger工具更改MAC地址Macchanger可以查看、修改MAC地址。New MAC:       a2:97:a2:55:53:be (unknown)查看一下ens33的MAC地址是否改變了[root@localhost
  • Linux有問必答:如何在Linux Mint Cinnamon啟用桌面共享
    ** (vino-server:4280): WARNING **: The desktop sharing service is not enabled, so it should not be run.要啟用桌面共享服務,請使用上面講過的dconf-editor。
  • 命令與徵服:一個合格Windows用戶都應該知道的10個基礎CMD命令
    如果你還不知道如何訪問Windows命令提示符界面,那麼請按快捷鍵WIN+R,輸入cmd,然後回車。雖然微軟已經慢慢地在Windows系統中將CMD命令行扔到到了一邊,讓你愛用不用了。這也不無道理,這項功能中的絕大多數命令在目前看來都是不必要。但是許多命令仍然有用,甚至在Windows 8和10中添加了新的CMD命令功能。
  • 每天一個linux命令(10):cat 命令
    這個命令常用來顯示文件內容,或者將幾個文件連接起來顯示,或者從標準輸入讀取內容並顯示,它常與重定向符號配合使用。 1.命令格式:cat [選項] [文件]...2.命令功能:cat主要有三大功能:1.一次顯示整個文件:cat filename2.從鍵盤創建一個文件:cat > filename 只能創建新文件,不能編輯已有文件.
  • 新手教程:如何在 Linux 下解壓 Zip 文件 | Linux 中國
    你也能夠使用命令行或者圖形工具來達到目的,我會向你展示兩種方法:使用命令行解壓文件在 Linux 下使用 unzip 命令是非常簡單的。在你放 zip 文件的目錄,用下面的命令:你可以給 zip 文件提供解壓路徑而不是解壓到當前所在路徑。
  • elementaryOS: 2018最美Linux
    想當年還在讀本科那會,debian還是比較陽春的東西,然後就被ubuntu給普及了,ubuntu我實際上是不喜歡的,如果有linux
  • ChromeOS 83為Linux終端新增預設主題:更換更簡單
    Linux命令大全:https://www.linuxcool.com/官方站點:www.linuxprobe.com Linux命令大全:www.linuxcool.comLinux系統下載站:www.linuxdown.com
  • 你們想要的:QQ跑在Linux上
    之前在寫《開源的macOS和linux版微信》時,有小夥伴問怎麼搞QQ,做為一個上了年紀的人,我已經不怎麼用QQ了。
  • Windows編程技術:進程隱藏
    定義是進程信息為5;五、程序測試    我們運行將要隱藏進程的程序DisplaySample.exe,然後打開任務管理器,可以查看到它是處於可見狀態。接著,以管理員權限運行我們的程序,設置全局消息鉤子,將 DLL 注入到所有的進程中,DLL便在DllMain入口點函數處HOOK ZwQuerySystemInformation函數,成功隱藏DisplaySample.exe的進程。
  • PS問答:PS是什麼意思?
    去百度搜索ps兩個字,就出現了好幾個相關聯的:ps是什麼意思?今天在這裡給大家解釋一下,我們經常看一些文章的時候,可能會有一些ps:xxxxx,這個代表的是某些備註的意思。另外一個ps就是我們說的一款圖片處理軟體了,全稱photoshop,簡稱PS。
  • SQL Server 2017 正式發布:同時支持 Windows 和 Linux
    來自:開源中國社區連結:https://www.oschina.net/news/89263/sql-server-2017-on-windows-linux-and-docker-ga隨著雲端運算越來越普及,微軟的 Azure 也可以運行 SQL Server 2017,能讓開發者用他們熟悉的開發語言和環境,來製作他們想要的應用,同時兼顧安全性和效能。SQL Server 2017 支持使用 R 和 Python 的分析方法,來做資料庫內的機器學習,意味著不必遷移資料,省下不少時間。
  • GitHub:傳統Linux系統的終結者?
    我們無法知道如Fedora採取的新計劃是否能夠拯救傳統的Linux系統,還是說傳統Linux最終會被CoreOS這樣的新型Linux系統取代,都值得我們關注和思考。GitHub 的詳細介紹:請點這裡 GitHub 的下載地址:請點這裡如何在 GitHub 建立組織 http://www.linuxidc.com/Linux/2013-08/88197.htmGitHub Linux下使用方法 http://www.linuxidc.com/Linux
  • 2016:如何選擇 Linux 桌面環境
    其中他們所做的最讓人感興趣的是集成了 Google Drive,用戶可以把他們的 Google Drive 掛載為遠程存儲設備,這樣就不必再使用瀏覽器來查看裡邊的文件了。我也很喜歡 GNOME 裡邊自帶的那個優秀的郵件客戶端,它帶有日曆和地址簿功能。儘管有這麼多些優秀的特性,但它的文件管理器使我不再使用 GNOME ,因為我無法處理批量文件重命名。