Strace
strace中帶-D和不帶-D的tracer、tracee和呼叫程序有什麼關係?
我很難理解 strace 的 -D 選項。strace 聯機幫助頁說
-D 作為分離的孫子程序執行跟踪器程序,而不是作為被跟踪者的父程序。這通過將被跟踪者保持為呼叫程序的直接子級來減少 strace 的可見效果。
“跟踪器程序”是執行 strace 的程序嗎?
“呼叫程序”是“跟踪程序”的父程序嗎?
在沒有-D和有-D的情況下,tracer、tracee和calling程序之間的父子關係是什麼?
謝謝!
跟踪器程序是執行的程序
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
請注意,
getppid()
除非使用,否則不會保留被跟踪程序與其父程序之間的父子關係(信號停止通知、值等)-D
。Running with
-D
意味著孩子在呼叫 時會找到其預期的父母getppid()
,並且當孩子停止和繼續時它也會SIGCHLD
正確執行。strace
當您在程序及其子程序之間插入時,當它的子程序需要找到它們的父程序時,這可能很重要。