strace命令来自英文单词“跟踪”,其功能是用于跟踪系统调用信息。strace命令是一个集诊断、调试、统计于一体的工具,可以对系统调用和信号传递的跟踪结果进行分析,从而解决问题。
Linux系统中进程不能直接访问硬件设备,当进程需要读取磁盘文件或接收网络数据时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。而strace命令则可以跟踪到一个进程产生的系统调用数据——包括参数,返回值,执行消耗时间等信息。
语法格式:strace [参数] [对象]
常用参数:
-a | 设置返回值的输出位置 |
-c | 显示执行时间、报错次数等信息 |
-d | 使用调试模式 |
-e | 指定一个表达式 |
-f | 跟踪由fork调用所产生的子进程 |
-F | 跟踪vfork调用 |
-h | 显示帮助信息 |
-o | 将输出结果写入到文件 |
-p | 设置进程号码 |
-q | 不显示离线消息 |
-r | 显示系统调用的相对时间 |
-t | 每一行前加上时间信息(秒) |
-tt | 每一行前加上时间信息(微秒级) |
-T | 显示每次调用所花费时间信息 |
-u | 显示指定用户或用户组的信息 |
-v | 显示所有的系统调用信息 |
-V | 显示版本信息 |
-x | 使用十六进制输出非标准字符串 |
-xx | 使用十六进制输出所有字符串 |
参考示例
根据指定进程的系统调用:
[root@linuxcool ~]# strace -p 5188
根据指定进程的所有系统调用,并统计所花费时间(微秒级):
[root@linuxcool ~]# strace -T -tt -e trace=all -p 5188