1. 程式人生 > >進程一些命令pstree,ps,pstack,top

進程一些命令pstree,ps,pstack,top

一次 調用 方式 輸出 沒有 per -c signal tac

Linux 為我們提供了一些工具可以查看進程的一些狀態信息,我們可以通過 top 動態實時的查看進程的狀態的已經系統的一些信息如 CPU、內存信息等等,我們同樣可以通過 ps 來靜態查看當前的進程信息,同時我們還可以使用 pstree 來查看當前活躍進程的樹形結構

pstree以樹結構顯示進程
$ pstree -p work | grep ad

ps -Lf 4551 或ps -eLf |grep server

pstack顯示每個進程的棧跟蹤 $ pstack 4551

ps命令用來列出系統中當前運行的那些進程。ps命令列出的是當前那些進程的快照,就是執行ps命令的那個時刻的那些進程,如果想要動態的顯示進程信息,就可以使用top命令。

要對進程進行監測和控制,首先必須要了解當前進程的情況,也就是需要查看當前進程,而 ps 命令就是最基本同時也是非常強大的進程查看命令。使用該命令可以確定有哪些進程正在運行和運行的狀態、進程是否結束、進程有沒有僵死、哪些進程占用了過多的資源等等。總之大部分信息都是可以通過執行該命令得到的。

ps 為我們提供了進程的一次性的查看,它所提供的查看結果並不動態連續的;如果想對進程時間監控,應該用 top 工具。

kill 命令用於殺死進程。

linux上進程有5種狀態:

1. 運行(正在運行或在運行隊列中等待)

2. 中斷(休眠中, 受阻, 在等待某個條件的形成或接受到信號)

3. 不可中斷(收到信號不喚醒和不可運行, 進程必須等待直到有中斷發生)

4. 僵死(進程已終止, 但進程描述符存在, 直到父進程調用wait4()系統調用後釋放)

5. 停止(進程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信號後停止運行運行)

ps工具標識進程的5種狀態碼:

D 不可中斷 uninterruptible sleep (usually IO)

R 運行 runnable (on run queue)

S 中斷 sleeping

T 停止 traced or stopped

Z 僵死 a defunct (”zombie”) process

1.命令格式:

ps[參數]

2.命令功能:

用來顯示當前進程的狀態

3.命令參數:

a 顯示所有進程

-a 顯示同一終端下的所有程序

-A 顯示所有進程

c 顯示進程的真實名稱

-N 反向選擇

-e 等於“-A”

e 顯示環境變量

f 顯示程序間的關系

-H 顯示樹狀結構

r 顯示當前終端的進程

T 顯示當前終端的所有程序

u 指定用戶的所有進程

-au 顯示較詳細的資訊

-aux 顯示所有包含其他使用者的行程

-C<命令> 列出指定命令的狀況

--lines<行數> 每頁顯示的行數

--width<字符數> 每頁顯示的字符數

--help 顯示幫助信息

--version 顯示版本顯示

4.使用實例:

實例1:顯示所有進程信息

命令:ps -A

實例2:顯示指定用戶信息

命令:ps -u root

實例3:顯示所有進程信息,連同命令行

命令:ps -ef

實例4: ps 與grep 常用組合用法,查找特定進程

命令:ps -ef|grep ssh

實例5:將目前屬於您自己這次登入的 PID 與相關信息列示出來

命令:ps -l

說明:

各相關信息的意義:

F 代表這個程序的旗標 (flag), 4 代表使用者為 super user

S 代表這個程序的狀態 (STAT),關於各 STAT 的意義將在內文介紹

UID 程序被該 UID 所擁有

PID 就是這個程序的 ID !

PPID 則是其上級父程序的ID

C CPU 使用的資源百分比

PRI 這個是 Priority (優先執行序) 的縮寫,詳細後面介紹

NI 這個是 Nice 值,在下一小節我們會持續介紹

ADDR 這個是 kernel function,指出該程序在內存的那個部分。如果是個 running的程序,一般就是 "-"

SZ 使用掉的內存大小

WCHAN 目前這個程序是否正在運作當中,若為 - 表示正在運作

TTY 登入者的終端機位置

TIME 使用掉的 CPU 時間。

CMD 所下達的指令為何

在預設的情況下, ps 僅會列出與目前所在的 bash shell 有關的 PID 而已,所以, 當我使用 ps -l 的時候,只有三個 PID。

實例6:列出目前所有的正在內存當中的程序

命令:ps aux

說明:

USER:該 process 屬於那個使用者賬號的

PID :該 process 的號碼

%CPU:該 process 使用掉的 CPU 資源百分比

%MEM:該 process 所占用的物理內存百分比

VSZ :該 process 使用掉的虛擬內存量 (Kbytes)

RSS :該 process 占用的固定的內存量 (Kbytes)

TTY :該 process 是在那個終端機上面運作,若與終端機無關,則顯示 ?,另外, tty1-tty6 是本機上面的登入者程序,若為 pts/0 等等的,則表示為由網絡連接進主機的程序。

STAT:該程序目前的狀態,主要的狀態有

R :該程序目前正在運作,或者是可被運作

S :該程序目前正在睡眠當中 (可說是 idle 狀態),但可被某些訊號 (signal) 喚醒。

T :該程序目前正在偵測或者是停止了

Z :該程序應該已經終止,但是其父程序卻無法正常的終止他,造成 zombie (疆屍) 程序的狀態

START:該 process 被觸發啟動的時間

TIME :該 process 實際使用 CPU 運作的時間

COMMAND:該程序的實際指令

實例7:列出類似程序樹的程序顯示

命令:ps -axjf

其他實例:1. 可以用 | 管道和 more 連接起來分頁查看

命令:ps -aux |more

2. 把所有進程顯示出來,並輸出到ps001.txt文件

命令:ps -aux > ps001.txt

3. 輸出指定的字段

命令: ps -o pid,ppid,pgrp,session,tpgid,comm

Linux下多線程查看工具(pstree、ps、pstack)

 pstree [-a] [-c] [-h|-Hpid] [-l] [-n] [-p] [-u] [-Z] [-A|-G|-U] [pid|user]

  pstree -V

options:
  -a:顯示每個程序的完整指令,包含路徑,參數或是常駐服務的標示
  -l:采用長列格式顯示樹狀圖
  -p:顯示進程的PID號
  -u:顯示用戶名稱
  -V:顯示版本信息
  [pid|user]:根據pid或者user信息來顯示我們需要的信息

示例1:以樹狀圖顯示進程還顯示進程號和進程ID

  # pstree -p

示例2:顯示所有進程的所有詳細信息

  # pstree -a

示例3:以樹狀圖顯示進程PID為<pid>的進程以及子孫進程

  # pstree <pid>

示例4:以樹狀圖顯示進程PID為<pid>的進程以及子孫進程,同時顯示每個進程的PID

  # pstree -p <pid>

Linux strace、pstack 命令 使用詳解

strace是Linux環境下的一款程序調試工具,用來監察一個應用程序所使用的系統調用及它所接收的系統信息。

可謂是 linux 下的調試利器,不僅可以用來找程序錯誤,系統為什麽掛死了,命令為什麽報錯,還可以用來查找哪些程序占用系統資源。

命令實例

比如,但網站服務器負載過大,網站數量又多,不知是那個網站占用太多資源,這時strace派上用場了。

第一步,查看 php-cgi 進程號:

ps aux | grep php-cgi

第二步,查看系統調用

strace -p 進程號

或者,將記錄結果存在output.txt文件中

strace -o output.txt -T -tt -e trace=all -p 進程號

mac下的命令為dtruss

pstack 看活動的進程內的堆棧

pstack 進程號

用top查看某個進程的信息,top -p 進程號

pstack:

pstack命令可顯示每個進程的棧跟蹤。

pstack 命令必須由相應進程的屬主或 root 運行。

可以使用 pstack 來確定進程掛起的位置。

此命令允許使用的唯一選項是要檢查的進程的 PID。

pstack 看活動的進程內的堆棧

用法:

root# pstack PID

gstack:

gstack -打印正在運行的進程的堆棧跟蹤

使用方法:

gstack PID

描述

gstack連接到命令行中pid的活動進程

打印執行堆棧跟蹤。如果ELF符號存在於二進制(usu -)中

如果你沒有運行條帶(1),那麽這個例子就會被打印出來

同樣如此。

如果進程是線程組的一部分,那麽gstack將打印出一個堆棧

對組中的每個線程進行跟蹤。

對pstack的作用, 大致可以歸納如下:
  1). 查看線程數(比pstree, 包含了詳細的堆棧信息)
  2). 能簡單驗證是否按照預定的調用順序/調用棧執行
  3). 采用高頻率多次采樣使用時, 能發現程序當前的阻塞在哪裏, 以及性能消耗點在哪裏?
  4). 能反映出疑似的死鎖現象(多個線程同時在wait lock, 具體需要進一步驗證)
  當然還能舉例更多的作用, 相信使用過jstack的coder, 必然深以為然.

pstack原理:
  pstack用途很大, 那其背後的原理是啥?
  可以觀察發現, 其實pstack是/usr/bin/gstack的軟鏈接, 而gstack本身是基於gdb封裝的shell腳本.
  技術分享圖片
  讓我們簡單分析下這個強大的shell腳本:
  技術分享圖片
  註: 由於代碼太長, 這邊選取最核心的片段, backtrace="thread apply all bt"
  shell采用了here document的方式, 完成了GDB的交互工作(註意EOF標識, 及範圍內的交互命令).
  重要的是輸入thread apply all bt這個交互命令. 該命令要求輸出所有的線程堆棧信息.
  對GDB輸出的結果, 通過管道並借助sed命令進行了替換和過濾.

總結:
  pstack其實是gdb的一個功能封裝, 但其實現的功能, 確實非常實用. 本文講述了pstack使用和原理, 以及常見的用途, 下文將講述死鎖檢測的一種機制, 歡迎關註.

進程一些命令pstree,ps,pstack,top