如何在 Linux 上使用 strace?
Linux 实用程序命令是使 Linux 成为如此强大的操作系统的关键,虽然我们可以使用大量命令来交互并获取有关信号和系统调用的信息,但在获取有关系统调用和信号的信息时,最常用和最受欢迎的命令是 Linux 的跟踪命令。
它可以用于获取系统的诊断信息,用于监控特定的进程或 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
.
.
.
广告
数据结构
网络
关系型数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP