Day Mode Night Mode
strace命令使用详解

strace是一个可用于诊断、调试和教学的Linux用户空间跟踪器。我们用它来监控用户空间进程和内核的交互,比如系统调用、信号传递、进程状态变更等。

1. 常见参数:

-e 用来指定要追踪的系统调用,信号,或者跟踪过滤条件。

-e trace=all 跟踪所有系统调用并显示时间戳
-e trace=file 跟踪与文件访问相关的系统调用
open, openat:打开文件。
close:关闭文件描述符。
read, pread64:从文件描述符读取数据。
write, pwrite64:向文件描述符写入数据。
lseek:修改文件指针的位置。
fstat, newfstatat:获取文件状态。
stat, lstat:获取文件属性。
mmap:内存映射文件。
fsync:将内存中的数据同步到磁盘。
unlink, unlinkat:删除文件或目录。
rename, renameat:重命名文件或目录。
chmod, fchmod:改变文件权限。
chown, fchown:改变文件所有者和组。
statfs, fstatfs:获取文件系统信息。

-e trace=process 跟踪和进程管理相关的系统调用,涉及创建、终止、退出、等待等操作。

fork:创建子进程。
vfork:创建子进程(不复制父进程的地址空间)。
clone:创建新进程。
execve:执行一个新程序。
exit, exit_group:退出进程。
waitpid:等待进程终止。
setpgid, getpgid:设置和获取进程组ID。
setsid:创建新的会话。
kill:发送信号给进程。
sigaction:设置信号处理器。
-e trace=network 跟踪与网络通信相关的系统调用,通常包括套接字的创建、连接、数据发送和接收等操作。

socket:创建套接字。
socketpair:创建一对无名套接字。
bind:绑定套接字到指定地址。
listen:监听套接字上的连接请求。
accept:接受一个连接。
connect:连接到远程套接字。
sendto,recvfrom:发送和接收数据。
sendmsg, recvmsg:发送和接收消息。
setsockopt, getsockopt:设置和获取套接字选项。
shutdown:关闭套接字的一部分或全部。
-e trace=signal 跟踪信号的发送、接收和处理,常用于调试进程之间的信号交互

kill:发送信号。
sigaction:设置信号处理程序。
sigprocmask:修改进程的信号掩码。
rt_sigprocmask:操作实时信号掩码。
sigsuspend:挂起进程,等待信号。
sigpending:获取待处理的信号。
sigwait:等待特定信号的到来。
-e trace=desc 跟踪与文件描述符相关的操作,常见于涉及输入输出的操作,比如文件读取、写入、事件通知等。

read, write:读写文件描述符。
select,pselect:等待文件描述符就绪。
poll,epoll_wait:等待文件描述符的事件。
ioctl:操作设备或文件描述符的行为。
fcntl:修改文件描述符的属性。
dup, dup2, dup3:复制文件描述符。
-e trace=ipc 跟踪进程间通信的系统调用,通常涉及共享内存、信号量、消息队列等
pipe,pipe2:创建管道。
shmget,shmat,shmdt,shmctl:操作共享内存。
semget,semop,semctl:操作信号量。
msgget,msgsnd,msgrcv,msgctl:操作消息队列。
mmap:内存映射区域。
-e trace=time 跟踪与时间相关的系统调用,通常包括获取和设置时间。
gettimeofday:获取当前时间。
clock_gettime:获取时钟时间。
nanosleep:休眠一段时间。
settimeofday:设置当前时间。
timer_create, timer_settime, timer_gettime:定时器操作
-e trace=memory 跟踪与内存管理相关的系统调用。
brk,sbrk:调整进程的堆内存大小。
mmap, munmap:内存映射和解除映射。
mprotect:修改内存保护属性。
msync:同步内存映射的内容到磁盘。
-e trace=security 跟踪和用户、权限相关的系统调用。
getuid, geteuid:获取用户ID和有效用户ID。
setuid, setgid:设置用户ID和组ID。
setresuid, setresgid:设置真实、有效、保存的用户/组ID。
getgroups,setgroups:获取和设置进程的组信息。

-e trace=mount 跟踪与挂载相关的系统调用,涉及文件系统挂载、卸载等操作。

mount:挂载文件系统。
umount:卸载文件系统。
-e trace=debug 跟踪与调试和诊断相关的系统调用。
ptrace:调试进程。
sysctl:系统控制(读取/设置系统参数)。

-f 跟踪由当前进程创建的子进程。即,跟踪 fork()clone()vfork() 等创建的进程。

-tt 输出时在每一行前面添加精确到微秒的时间戳

-T 显示每个系统调用的执行时间。

-p 附加到已经存在的进程(通过其进程ID)进行跟踪。 示例:strace -p 1234

-c 打印每个系统调用的统计信息,如调用次数、错误次数、总时间等。

-v 输出更多的详细信息,尤其是关于系统调用的错误和返回值。

-o 重定向到文件当中

2. 示例命令:

strace -f -tt -T -v -e trace=all -o /tmp/strace.log ls

使用了 strace 命令来追踪 ls程序的系统调用

strace -f -tt -T -v -e trace=all -o /tmp/strace.log -p 1

使用的 strace 命令用来跟踪 24298程序及其子进程的系统调用

3. 部分字段详解

点击展开

execve 是一个系统调用,用于启动一个新程序

brk 是用来调整进程的数据段大小的

mmap 是 Linux 和类 Unix 系统中的一个系统调用,用于将文件或设备映射到进程的内存地址空间。它允许程序直接在内存中访问文件内容,而无需使用传统的 read 和 write 系统调用。除此之外,mmap 还可以用于匿名内存映射,用于动态分配内存。

access() 是一个用于检查文件访问权限的系统调用。它检查文件是否存在,或者文件是否可读、可写等。

statfs 系统调用用于获取指定路径的文件系统信息。

openat() 是一个系统调用,用于打开文件。与 open() 系统调用不同,openat() 可以指定一个目录描述符来作为基准路径,便于相对路径的解析。

read(3, …):这是一个 read() 系统调用,文件描述符为 3,该调用尝试从文件中读取数据。

newfstatat() 获取文件的状态信息(如文件的大小、权限等),这对进一步处理文件非常重要。

access():这个系统调用用于检查文件是否存在,或者判断当前进程是否有访问该文件的权限。它有不同的模式,可以检查文件是否存在、是否可读、可写或可执行。

readlink():该系统调用用于读取符号链接(symlink)所指向的目标路径。在 Linux 系统中,文件描述符(file descriptor)对应的文件可以是符号链接,readlink() 用来获取这个符号链接的目标路径。

uname 是一个用来获取系统信息的系统调用,它返回当前操作系统的相关信息,如系统名称、主机名称、内核版本等。你看到的这一行是 uname 系统调用的返回结果。

ioctl 是一个用来控制设备的系统调用。这里 0 表示标准输入(stdin)。TCGETS 表示获取终端的当前设置。

process 表示只跟踪和进程管理相关的系统调用

write写入

socket()创建一个 Unix 域套接字

connect() 调用尝试连接到指定的 Unix 域套接字路径

readlink 来读取符号链接 /proc/self/exe,该链接指向当前进程的可执行文件。

rt_sigaction 是一个用于设置实时信号处理程序的系统调用。

rt_sigprocmask(SIG_BLOCK, [TSTP], [], 8) = 0
这是在阻塞 TSTP 信号,TSTP 信号通常用于暂停进程(如按下 Ctrl+Z)。这意味着进程暂时不会处理 TSTP 信号。
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
这是恢复信号屏蔽,移除了之前的信号屏蔽。

评论

  1. 3 周前
    2026-2-18 5:50:46

    That analysis was spot on! Seeing teams adapt strategies is what makes esports so exciting. Thinking about reliable platforms, have you checked out jj8 club? Heard they’re big in the PH scene with classic games & solid security! 🔥

  2. 1 周前
    2026-2-25 22:38:59

    It’s easy to get carried away with online gaming, so responsible bankroll management is key! Seeing platforms like JL98 prioritize verification & fairness is good-check out their jl98 games if you’re exploring options, but always gamble within your means.

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇