首页 » linux » strace手册

strace手册

 
strace用来看某个进程的系统调用以及所接收到的信号

追踪某个命令

会输出很多系统调用命令, 如下面,  =左边是系统调用,右边是系统调用结果
$strace ls -l      能看到ls -l命令整个的系统调用情况
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=388, ...}) = 0

-p 追踪某个进程,需要带上-f来追踪所有子进程

$strace -f -p 5926 -o /home/***/5926.strace.log

-c 参数,输出统计结果

-c  可以输出系统调用的统计结果,也就是每个命令的占比
$strace -c -f -p 5926 -o /home/***/5926.strace.log

#less  /home/***/5926.strace.log
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 60.47   19.181735        7429      2582      1258 futex
 23.42    7.429387      212268        35        35 restart_syscall
 11.14    3.533856         983      3596           epoll_wait
  1.50    0.475396          51      9368           setsockopt
  0.79    0.250978          54      4684           fcntl
  0.72    0.227007          48      4684      2342 epoll_ctl
  0.42    0.132211          56      2342      2342 connect
  0.40    0.127517          54      2342           getsockopt
  0.39    0.123448          53      2342           close
  0.38    0.119249          51      2342           dup2
  0.37    0.117744          50      2342           socket
  0.00    0.000432          15        29           recvfrom
  0.00    0.000210           7        29           poll
  0.00    0.000000           0        10           write
  0.00    0.000000           0        29           sendto
------ ----------- ----------- --------- --------- ----------------
100.00   31.719170                 36756      5977 total

-T 输出系统调用花费时间

-T  表示记录各个系统调用花费的时间,精确到微妙,结果中的 <0.000020> 为时间
$strace -T -f -e trace=network  -p 9618 -o /home/A/desc.trace.9618
$cat /home/A/desc.trace.9618
9700  getsockopt(76, SOL_SOCKET, SO_ERROR, [111], [4]) = 0 <0.000020>

-t 打印系统调用的发生时间

$strace -f -t   -p 9618 -o /home/A/9618.strace
$cat /home/A/9618.strace
9705  21:57:09 getsockopt(54, SOL_SOCKET, SO_ERROR, [111], [4]) = 0

-e expr, 可以指定某个系统调用

下面为追踪read的系统调用
$strace -f -e read -p 9618   -o 9618.read.log

-e trace=network 追踪网络调用情况

$strace -f -t  -e trace=network  -p 9618 -o /home/A/desc.trace.9618.withouti
$cat /home/A/desc.trace.9618.withouti
9705  21:57:09 getsockopt(54, SOL_SOCKET, SO_ERROR, [111], [4]) = 0
...

-e trace=open 追踪open系统调用

也可以trace=open,close,read,write
$strace -e trace=open  -o a.txt.log

$less a.txt.log
open("/etc/ld.so.cache", O_RDONLY)      = 3
open("/lib64/libtinfo.so.5", O_RDONLY)  = 3
open("/lib64/libpcre.so.0", O_RDONLY)   = 3
...

-e trace=file, 记录文件操作

把5926对文件的操作记录下来,相当于trace=open.stat,chmod,unlink...
$strace -f -e trace=file -p 5926 -o 5926.file.trace.log

-e trace=process, 把关于进程的系统调用记录下来

把6259对process系统调用的操作记录下来,相当于trace=
$strace -f -e trace=process -p 6259 -o 6259.file.process.log

-e trace=network, 把关于进程的系统调用记录下来

把5926对网络的系统调用记录下来
$strace -f -e trace=network -p 5926  -o 5926.network.log

-e trace=ipc 把进程间通讯记录下来

把5926对进程间通讯的系统调用记录下来
$strace -f -e trace=ipc -p 5926  -o 5926.ipc.log

 

http://www.itshouce.com.cn/linux/linux-strace.html

原文链接:strace手册,转载请注明来源!

0