我很难理解 strace 的 -D 选项。 strace 手册页说
-D 作为独立孙子运行跟踪器进程,而不是作为被跟踪者的父进程。通过将被跟踪者保持为调用进程的直接子进程,这可以减少 strace 的可见影响。
“跟踪器进程”是运行 strace 的进程吗?
“调用进程”是“跟踪进程”的父进程吗?
不带 -D 和带 -D 时,跟踪器、被跟踪者和调用进程之间的父子关系是什么?
谢谢!
答案1
跟踪进程是运行的进程strace
,是的。调用进程是启动的进程strace
,通常是您的 shell。
如果没有-D
,被跟踪进程的父进程最终会是strace
:
strace sleep 120
显示pstree
为
-───zsh───strace───sleep
随着-D
,strace
它自我分离,并最终在我的系统上重新成为我的用户systemd
进程的父进程:
|-systemd-+-(sd-pam)
...
| |-gnome-terminal--+-3*[zsh]
| | |-zsh---sleep
...
| |-strace
该选项的影响-D
简要描述于手册strace
页:
请注意,除非使用
getppid()
,否则不会保留跟踪进程与其父进程之间的父子关系(信号停止通知、值等)。-D
运行 with-D
意味着子进程在调用 时会找到其期望的父进程getppid()
,并且还可以使SIGCHLD
子进程停止和继续时行为正确。当您strace
在进程及其子进程之间插入时,当其子进程需要找到其父进程时,这可能很重要。