Strace

strace中帶-D和不帶-D的tracer、tracee和呼叫程序有什麼關係?

  • November 29, 2018

我很難理解 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

該選項的影響手冊頁-D中有簡要描述:strace

請注意,getppid()除非使用,否則不會保留被跟踪程序與其父程序之間的父子關係(信號停止通知、值等)-D

Running with-D意味著孩子在呼叫 時會找到其預期的父母getppid(),並且當孩子停止和繼續時它也會SIGCHLD正確執行。strace當您在程序及其子程序之間插入時,當它的子程序需要找到它們的父程序時,這可能很重要。

引用自:https://unix.stackexchange.com/questions/484942