如何在 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
.
.
.
相关文章
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

