[TOC]
strace 跟蹤進(jìn)程中的系統(tǒng)調(diào)用
strace常用來(lái)跟蹤進(jìn)程執(zhí)行時(shí)的系統(tǒng)調(diào)用和所接收的信號(hào)。 在Linux世界,進(jìn)程不能直接訪問(wèn)硬件設(shè)備,當(dāng)進(jìn)程需要訪問(wèn)硬件設(shè)備(比如讀取磁盤(pán)文件,接收網(wǎng)絡(luò)數(shù)據(jù)等等)時(shí),必須由用戶(hù)態(tài)模式切換至內(nèi)核態(tài)模式,通過(guò)系統(tǒng)調(diào)用訪問(wèn)硬件設(shè)備。strace可以跟蹤到一個(gè)進(jìn)程產(chǎn)生的系統(tǒng)調(diào)用,包括參數(shù),返回值,執(zhí)行消耗的時(shí)間。
6.1. 輸出參數(shù)含義
每一行都是一條系統(tǒng)調(diào)用,等號(hào)左邊是系統(tǒng)調(diào)用的函數(shù)名及其參數(shù),右邊是該調(diào)用的返回值。 strace 顯示這些調(diào)用的參數(shù)并返回符號(hào)形式的值。strace 從內(nèi)核接收信息,而且不需要以任何特殊的方式來(lái)構(gòu)建內(nèi)核。
strace cat /dev/null
execve("/bin/cat", ["cat", "/dev/null"], [/* 22 vars */]) = 0
brk(0) = 0xab1000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f29379a7000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
...
實(shí)際命令
strace -p 98761 -f -s 65536 2>&1 |grep -i xxx
-f 跟蹤由fork調(diào)用所產(chǎn)生的子進(jìn)程.
-p pid
跟蹤指定的進(jìn)程pid.
-s strsize
指定輸出的字符串的最大長(zhǎng)度.默認(rèn)為32.文件名一直全部輸出.