![image-20220929080045204](/Users/mac/Library/Application Support/typora-user-images/image-20220929080045204.png)
对于正在运行的进程而言,strace 可以 attach 到目标进程上,这是 通过 ptrace 这个系统调用实现的(gdb 工具也是如此)
ptrace 的 PTRACE_SYSCALL 会去追踪目标进程的系统调用;目标进程被追踪后,每次进入 syscall,都会产生 SIGTRAP 信号并暂停执行;
追踪者通过目标进程触发的 SIGTRAP 信号,就可以知道目标进程进入了 系统调用,
然后追踪者会去处理该系统调用,我们用 strace 命令观察到的信息输出就是该 处理的结果;追踪者处理完该系统调用后,就会恢复目标进程的执行。
被恢复的目标进程 会一直执行下去,直到下一个系统调用。
目标进程每执行一次系统调用都会被打断,等 strace 处理完后,目标进程才 能继续执行,这就会给目标进程带来比较明显的延迟。因此,在生产环境中我不建议使用 该命令,如果你要使用该命令来追踪生产环境的问题,那就一定要做好预案