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