strace命令 – 跟踪系统调用信息

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