如何在 Linux 上使用 strace?

linuxoperating systemopen source更新于 2026/2/15 3:52:17

Linux 实用命令使 Linux 如此强大。虽然有很多命令可以用来交互并获取有关信号和系统调用的信息,但在获取系统调用和信号信息方面,最常用和最受欢迎的命令是 linux trace 命令。

它可以用来诊断系统,监控 Linux 的特定进程或指令工具。它有各种各样的用例,其中一些用例是 −

  • 打印每个系统调用的时间戳

  • 输出包含时钟时间的行

  • 跟踪正在运行的进程

  • 拦截系统调用

虽然这些可能只是一些用例,但还有很多情况下我们可以使用 strace。

在使用 strace 工具之前,我们必须在本地机器上安装它。请考虑以下针对不同操作系统使用的不同命令,以便在本地操作系统上安装 strace 工具。

对于 Ubuntu/Debian −

sudo apt install strace

对于 CentOS/RedHat −

yum install strace

对于 Mac OS −

brew install strace

安装完 strace 后,让我们考虑几个使用 strace 工具的示例。

下面显示的第一个示例包含一个命令,它将打印 Linux 环境中的 Linux 命令系统调用。

只需在终端中输入以下命令 −

sudo strace df -h

输出

root@Vostro-15-3568:/home/# strace df -h
execve("/bin/df", ["df", "-h"], [/ 31 vars /]) = 0
brk(NULL) = 0x888000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
access("/etc/ld.so.preload", R_OK) = 0
open("/etc/ld.so.preload", O_RDONLY|O_CLOEXEC) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=0, ...}) = 0
close(3) = 0
open("/home/cavisson/Documents/github/cavisson/prodsrc/core/netdiagnosticsagent/goAgent/lib/tls/x86_64/libc.so.6",
O_RDONLY|O_CLOEXEC) = -1 ENOENT
.
.
.
.

我们再运行一​​个例子,通过附加进程 ID 来获取该进程的系统调用。

在终端中输入以下命令 −

sudo strace -p pid

将上述示例中的 pid 替换为您想要获取系统调用的进程的进程 ID。

示例

strace -p 1924

输出

root@Vostro-15-3568:/home/# strace -p 1616
strace: Process 1616 attached
select(11, [9 10], NULL, NULL, {0, 9427}) = 0
select(11, [9 10], NULL, NULL, {0, 10000}) = 0
.
.
.

相关文章


有用资源