這才是使用ps命令的正確姿勢

這才是使用ps命令的正確姿勢前言在linux系統當中我們通常會使用命令去查看一些系統的進程信息,我們最常使用的就是 ps (process status) 。ps 命令主要是用于查看當前正在運行的程序 , 以及他們相關的的信息,我們可以通過不同的選項進行查看 。ps 給我們提供了非常多的選項 , 這些選項常常令人分辨不清楚 , 本篇文章我們仔細談一談 ps 輸出具體的含義 。
ps命令詳解只輸出跟當前shell有關的進程當我們在命令行當中直接輸入 ps 命令 , 那么就只能夠看到在當前終端當中啟動的進程,即使同一個用戶啟動其他的終端,在這個終端當中也不能看到同一個用戶在其他終端啟動的進程,如下圖所示:

這才是使用ps命令的正確姿勢

文章插圖
分割線表示上下有兩個終端:
  • 我們在上一個終端后臺啟動一個 sleep.out 的程序,我們就能夠在上面的終端里面看到我們剛剛啟動的程序 。
  • 但是我們在下面同一個用戶的不同終端就不能夠看到在上面一個終端啟動的程序 。
ps 命令輸出的含義:
  • PID:進程的進程號,有唯一性 。
  • TTY:用戶登陸的時候使用的虛擬終端 。
  • TIME:程序使用的CPU時間總和 。
  • CMD:進程啟動的時候執行的命令 。
輸出所有的進程ps -Aps -e上面的兩個命令輸出系統當中所有的進程信息,我們可以使用這個命令統計系統當中一個有多少進程:
這才是使用ps命令的正確姿勢

文章插圖
輸出所有進程但是排除終端和session leaderps -a上面的命令輸出除了 session leader 和跟終端無關的所有進程 。
  • 跟終端無關的進程很好理解,就是跟終端脫離關系,一般是系統進程和用戶的守護進程 。
  • 而 session leader 就是你登陸終端時候的那個進程 , 如下圖所示:
    這才是使用ps命令的正確姿勢

    文章插圖
一個更具體的描述一個 shell 中 session leader 和其他進程的關系如下圖所示(圖中最左方就是 session leader 進程):
這才是使用ps命令的正確姿勢

文章插圖
查看正在運行的程序ps -r查看當前用戶的進程ps -x查看具體某個進程的信息ps -p pid
這才是使用ps命令的正確姿勢

文章插圖
輸出內容攜帶用戶名【這才是使用ps命令的正確姿勢】ps -u查看所有與當前終端有關的進程這個命令和直接輸入ps執行的效果一樣
ps -T一個我們非常熟悉的命令我們在linux操作系統下面我們通常使用 ps 命令的時候,我們會使用如下兩個命令:
ps aux # ax 通常要在一起使用 一起使用時候的效果和 -e 或者 -A 是一樣的ps -ef其實在很多情況下我們只想查看與我們自己有關的程序 , 而上面的兩個命令還查看了很多其他用戶的進程,因此我們可以修改一下上面兩個命令:
ps xu上面這個命令只會輸出與我們自己有關的程序同時輸出的內容還算完整 。
這才是使用ps命令的正確姿勢

文章插圖
指定ps命令輸出的內容在前面的命令當中我們都沒有定制化的輸出過一些內容,都是ps命令想輸出啥就輸出啥!其實我們可以指定ps命令只輸出我們需要的內容,比如下面的命令輸出進程id,父進程id,以及程序執行時候輸入的命令:
ps -o pid,ppid,command?  pthreads ps -o pid,ppid,command    PID    PPID COMMAND2782266   34624 /usr/bin/zsh2825942 2782266 ps -o pid,ppid,command-o表示指定我們想要輸出的內容 , 在上面的命令當中:
  • pid: 表示當前進程的進程號 。
  • ppid: 表示當前進程父進程的進程號 。
  • command: 表示執行這個命令的時候輸入的命令 。
還有很多其他的可以輸出的內容,在下表當中列出一些經常使用的條目:
條目含義pid進程號ppid父進程進程號command執行命令%cpu進程對于cpu的使用率%mem內存占有率comm更加簡潔的命令和command一致cputime進程累計使用的CPU時間etime進程開始執行到現在一共過了多長時間stat進程的狀態ni進程的優先級user用戶名

推薦閱讀