歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Unix知識 >> 關於Unix >> 使用truss實現在Solaris下定位方法

使用truss實現在Solaris下定位方法

日期:2017/3/6 14:28:43   编辑:關於Unix
在Solaris下面,如果需要跟蹤系統的調用,以便查找和定位問題,truss是一個非常有用的命令,下面就對這個命令做詳細介紹。 truss 命令 用途 跟蹤進程的系統調用、動態裝入的用戶級函數調用、接收的信號和造成的機器故障。 語法 truss [ -f] [ -c] [ -a] [ -l 在Solaris下面,如果需要跟蹤系統的調用,以便查找和定位問題,truss是一個非常有用的命令,下面就對這個命令做詳細介紹。

truss 命令
用途

跟蹤進程的系統調用、動態裝入的用戶級函數調用、接收的信號和造成的機器故障。

語法

truss [ -f] [ -c] [ -a] [ -l ] [ -d ] [ -D ] [ -e] [ -i] [ { -t | -x} [!] Syscall […] ] [ -s [!] Signal […] ] [ { -m }[!] Fault […]] [ { -r | -w} [!] FileDescriptor […] ] [ { -u } [!]LibraryName […]:: [!]FunctionName [ … ] ] [ -o Outfile] {Command| -p pid [. . . .]}

描述
truss 命令執行指定命令或附加在列出進程標識上,並產生對系統調用、接收的信號和進程造成的機器故障的跟蹤。每行跟蹤輸出報告 Fault 或 Signal 名稱或 Syscall 名稱和參數及返回值。系統庫定義的子例程對於內核的嚴格系統調用並不是必要的。truss 命令不報告這些子例程,而是報告子例程的基本系統調用。 可能的話,系統調用參數使用有關系統頭文件定義符號顯示。對於路徑名指針參數,truss 顯示指向的字符串。未定義的系統調用缺省顯示系統名稱、所有八個可能的變量及十六進制格式的返回值。

  當 -o 標志與 truss 一起使用,或標准錯誤改指向非終端文件時,truss 忽略掛斷、中斷和信號進程。它促進跟蹤交互式程序從終端獲得 interrupt 和 quit 信號。

若跟蹤輸出保持指向終端或跟蹤現存過程(使用 -p 標志),truss 對 hangup、interrupt 和 quit 信號做出反應,釋放所有跟蹤進程並退出。它使用戶可終止過多的跟蹤輸出並釋放前現存進程。釋放進程繼續到功能恢復正常。

對與含有一列變量的選項,名稱 all 可用作指定列表中所有可能成員的簡寫。以 ! 開頭的列表,選項含義是相反的(示例:排除而非跟蹤)。同一選項可能指定為多種表現形式。同一列表的相同名稱,後面的選項(右邊選項)覆蓋前面的選項(左邊選項)。

除了頁面故障以外的所有機器故障均導致公布信號到發生故障進程。除了進程阻塞信號,每一機器故障報告後立即給出接收的信號報告。

為避免與其它控制進程沖突,truss 不跟蹤由其檢測到並由帶有 /proc 接口的另一進程控制的進程。

多進程跟蹤輸出不是按嚴格的時間順序產生。示例:管道讀取可以在相應的寫之前報告。然而每一進程輸出是嚴格按時間排序。跟蹤輸出含有制表符,且每八個位置設置標准制表符停止位。

系統跟蹤子進程時可運行於每個用戶進程槽之外。這是因為跟蹤多個進程時,truss 作為所跟蹤進程的控制進程運行,將用於所給進程的進程槽數目加倍。運行多進程跟蹤之前應考慮通常系統強制的每個用戶 25 進程的限制。

處理多個進程時,truss 使用共享內存和信號。例如:在多進程標識下使用 -f 標志和 -p 標志。需要的話,跟蹤可運行於非配置系統中。這些情況下,truss 生成警告消息並繼續跟蹤。然而跟蹤輸出可能斷章取義,-c 標志輸出僅報告頂級命令或第一個進程標識,不計數子進程。

操作系統為進程跟蹤強加某種安全性限制。必須有跟蹤命令的存取特權。 set-uid 和 set-gid 進程僅可由特權用戶跟蹤。除由特權用戶運行外,truss 命令無法控制執行 set-id 或不可讀對象代碼的進程。這些未跟蹤的進程從執行點保持正常並與 truss 無關。

truss 輸出提到的輕量級進程(LWP)是真正的內核線程。選項 -l 在每行跟蹤輸出顯示 LWP 標識(即線程標識)。

AIX 庫的用戶庫函數有靜態和動態兩種裝入函數調用。選項 -u 跟蹤僅用於動態裝入函數調用。

  -u 選項提供動態裝入函數調用的用戶級函數調用跟蹤。此選項產生函數調用的進入/退出跟蹤。

  標志

  -a 顯示在每一執行系統調用中傳遞的參數字符串。

  -c 計數跟蹤系統調用、故障和信號而不是逐行顯示跟蹤結果。跟蹤命令終止或 truss 中斷時生成摘要報告。若還使用 -f 標志,計數包含所有跟蹤的系統調用、故障和子進程信號。

  -d 每行輸出包含時間戳記。時間從跟蹤開始以每秒顯示。跟蹤輸出的第一行顯示測量單個時間戳記的基本時間。缺省不顯示時間戳記。

  -D 每行輸出顯示增量時間。增量時間表示從由該線程引起的最後報告事件起計時引起事件的 LWP 的逝去時間。缺省不顯示增量時間。

 

Copyright © Linux教程網 All Rights Reserved