目录
strace 使用指南
一、基本使用
二、系统调用简介
三、strace 的两种使用方式
1. 跟踪即将启动的进程
2. 跟踪已启动的进程
四、strace 常见参数介绍
1.参数说明
2.跟踪某一类系统调用
3.其他跟踪工具
五、strace 输出详细解读
1.输出标准格式
2.示例输出解析
3.ps 命令典型流程
字段含义汇总
系统调用说明
strace 使用指南
strace 是一个非常有用的诊断、调试和教学工具,用于 Linux 系统。它能够跟踪程序执行过程中所进行的系统调用(system calls)以及程序接收到的信号(signals)。通过使用 strace,你可以监控你的应用程序与操作系统内核之间的交互细节,这对于分析程序行为、找出性能瓶颈或定位错误非常有帮助。
一、基本使用
最基本的使用方式是直接跟上你想追踪的命令。例如,要查看 ls 命令执行时的系统调用,你可以运行:
strace ls
这将输出大量的信息到终端,包括每个系统调用的名称、参数和返回值。
如果你只对特定类型的系统调用感兴趣,可以使用 -e 选项来过滤它们。例如,只已关注文件打开操作,你可以这样指定:
strace -e open ls
常用选项
-p PID:附加到一个已经运行的进程,PID 是该进程的进程ID。
-o filename:将输出重定向到一个文件中,方便之后查看。
示例:strace -o ps_trace.log ps
-t 或 -tt 或 -ttt:在每行输出前加上时间戳。-tt 提供更精确的时间格式。
-f:除了跟踪初始进程外,还要跟踪其 fork 出来的子进程。
-c:统计每个系统调用的花费时间、次数和错误数,并给出总结报告。
当你运行带有 strace 的命令时,你会看到类似如下的输出:
open("file.txt", O_RDONLY) = 3
read(3, "This is a test file.
", 4096) = 21
close(3) = 0
每一行显示了一个系统调用的信息,包含系统调用的名称、传给它的参数、以及系统调用的返回值。如果发生错误,你还会看到相应的错误消息。
二、系统调用简介
在计算机中,系统调用(System Call) 指运行在用户空间的程序向操作系统内核请求需要更高权限运行的服务。系统调用提供用户程序与操作系统之间的接口。关联文章: 【操作系统】 Linux 系统调用(一)
操作系统的进程空间分为:
用户空间:通过 API 请求内核空间的服务。
内核空间:直接运行在硬件上,提供设备管理、内存管理、任务调度等功能。
Linux 内核目前有 300 多个系统调用,详细的列表可以通过 syscalls 手册页查看。这些系统调用主要分为几类:
| 分类 | 示例系统调用 |
|---|---|
| 文件和设备访问 | open, close, read, write, chmod |
| 进程管理 | fork, clone, execve, exit, getpid |
| 信号处理 | signal, sigaction, kill |
| 内存管理 | brk, mmap, mlock |
| 进程间通信 (IPC) | shmget, semget, msgget |
| 网络通信 | socket, connect, sendto, sendmsg |
| 其他 |
熟悉 Linux 系统调用/系统编程,能够让我们在使用 strace 时得心应手。对于运维的问题定位来说,会使用 strace 这个工具,会查系统调用手册,足够应对大多数场景。
三、strace 的两种使用方式
1. 跟踪即将启动的进程
通过 strace 启动要跟踪的进程,用法是在原有的命令前面加上 strace 即可。
示例:
strace -o ps_trace.log ps
cat ps_trace.log
![图片[1] - 【操作系统】strace 跟踪系统调用(一) - 宋马](https://pic.songma.com/blogimg/20250731/bf3d1b28b8014f0f8075244e8627ca52.png)

这里可以看出
ps命令本质是不断读取/proc/<pid>下面的信息并展示。
2. 跟踪已启动的进程
通过 -p 参数传递正在运行的进程的 PID 来跟踪。
示例:
strace -p 27256 -o ssh_strace.log
















暂无评论内容