shell学习(24)- strace

strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等

常见参数如下

-tt 在每行输出的前面,显示毫秒级别的时间
-ttt也可以向上面那样展示微秒级的时间戳
-T 显示每次系统调用所花费的时间
-v 对于某些相关调用,把完整的环境变量,文件stat结构等打出来。
-f 跟踪目标进程,以及目标进程创建的所有子进程
-e 控制要跟踪的事件和跟踪行为,比如指定要跟踪的系统调用名称
-o 把strace的输出单独写到指定的文件
-s 当系统调用的某个参数是字符串时,最多输出指定长度的内容,默认是32个字节
-p 指定要跟踪的进程pid, 要同时跟踪多个pid, 重复多次-p选项即可
-r 选项展示系统调用之间的相对时间戳
-c 它包括系统调用的概要,执行时间,错误等等。使用-c选项能够以一种整洁的方式展示

常见跟踪

-e trace=file 跟踪和文件访问相关的调用(参数中有文件名)
-e trace=process 和进程管理相关的调用,比如fork/exec/exit_group
-e trace=network 和网络通信相关的调用,比如socket/sendto/connect
-e trace=signal 信号发送和处理相关,比如kill/sigaction
-e trace=desc 和文件描述符相关,比如write/read/select/epoll等
-e trace=ipc 进程见同学相关,比如shmget等

 

使用例子:

[kumufengchun@localhost~]$ strace ls
execve("/bin/ls", ["ls"], [/* 42 vars */]) = 0
brk(0)                                  = 0x1af0000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fb98b254000
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/opt/rh/devtoolset-6/root/usr/lib64/tls/x86_64/libselinux.so.1", O_RDONLY) = -1 ENOENT (No such file or directory)

...

跟踪nginx进程访问了哪些文件

strace -tt -T -f -e trace=file -o /data/log/strace.log -s 1024 ./nginx

跟踪某个进程

strace -o strace.log -tt -p 24298

 

参考:

https://blog.csdn.net/wang725/article/details/89297945

 https://linux.cn/article-3935-1.html

posted @ 2021-04-01 16:59  枯木逢春  阅读(137)  评论(0编辑  收藏  举报