1. 程式人生 > 其它 >Linux監控命令之strace

Linux監控命令之strace

一、命令介紹

strace 常用來跟蹤程序執行時的系統呼叫和所接收的訊號。在Linux 世界,程序不能直接訪問硬體裝置,當程序需要訪問硬體裝置(比如讀取磁碟檔案,接收網路資料等等)時,必須由使用者態模式切換至核心態模式,通過系統呼叫訪問硬體裝置。strace 可以跟蹤到一個程序產生的系統呼叫,包括引數,返回值,執行消耗的時間。

二、引數說明

  • -p:跟蹤指定的程序。
  • -f:跟蹤由fork 子程序系統呼叫。
  • -F:嘗試跟蹤vfork 子程序系統調吸入,與-f 同時出現時, vfork 不被跟蹤。
  • -o filename:預設strace 將結果輸出到stdout。通過-o 可以將輸出寫入到filename 檔案中。
  • -ff:常與-o 選項一起使用,不同程序(子程序)產生的系統呼叫輸出到filename.PID 檔案。
  • -r:列印每一個系統呼叫的相對時間。
  • -t:在輸出中的每一行前加上時間資訊。-tt 時間確定到微秒級。還可以使用-ttt 列印相對時間。
  • -v:輸出所有系統呼叫。預設情況下,一些頻繁呼叫的系統呼叫不會輸出。
  • -s:指定每一行輸出字串的長度,預設是32。檔名一直全部輸出。
  • -c:統計每種系統呼叫所執行的時間,呼叫次數,出錯次數。
  • -d:輸出strace 關於標準錯誤的除錯資訊。
  • -h:輸出簡要的幫助資訊。
  • -i:輸出系統呼叫的入口指標。
  • -q:禁止輸出關於脫離的訊息。
  • -tt:在輸出中的每一行前加上時間資訊,微秒級。
  • -T:顯示每一呼叫所耗的時間。
  • -V :輸出strace 的版本資訊。
  • -x:以十六進位制形式輸出非標準字串。
  • -xx:所有字串以十六進位制形式輸出。
  • -u:以username的UID和GID執行被跟蹤的命令
  • -e expr:指定一個表示式,用來控制如何跟蹤.格式:[qualifier=][!]value1[,value2]
  •   qualifier只能是 trace,abbrev,verbose,raw,signal,read,write其中之一.value是用來限定的符號或數字.預設的 qualifier是 trace.感嘆號是否定符號.例如:-eopen等價於 -e trace=open,表示只跟蹤open呼叫.而-etrace!=open 表示跟蹤除了open以外的其他呼叫.有兩個特殊的符號 all 和 none. 注意有些shell使用!來執行歷史記錄裡的命令,所以要使用\\.
  •   -e trace=set 只跟蹤指定的系統 呼叫.例如:-e trace=open,close,rean,write表示只跟蹤這四個系統呼叫.預設的為set=all
  •   -e trace=file 只跟蹤有關檔案操作的系統呼叫
  •   -e trace=process 只跟蹤有關程序控制的系統呼叫
  •   -e trace=network 跟蹤與網路有關的所有系統呼叫
  •   -e strace=signal 跟蹤所有與系統訊號有關的 系統呼叫
  •   -e trace=ipc 跟蹤所有與程序通訊有關的系統呼叫
  •   -e abbrev=set 設定strace輸出的系統呼叫的結果集。-v 等與 abbrev=none.預設為abbrev=all
  •   -e raw=set 將指定的系統呼叫的引數以十六進位制顯示
  •   -e signal=set 指定跟蹤的系統訊號.預設為all。如 signal=!SIGIO(或者signal=!io),表示不跟蹤SIGIO訊號
  •   -e read=set 輸出從指定檔案中讀出 的資料。例如: -e read=3,5
  •   -e write=set 輸出寫入到指定檔案中的資料

三、具體用法介紹

1、跟蹤指定程序