-D があるか、-D がない strace のトレーサー、被追跡者、呼び出しプロセスの関係は何ですか?

-D があるか、-D がない strace のトレーサー、被追跡者、呼び出しプロセスの関係は何ですか?

straceの-Dオプションを理解するのに問題があります。 strace のマニュアルページは次のように述べています。

-Dトレースプロセスの親プロセスではなく、独立した孫としてトレースプロセスを実行します。これは、被追跡者を呼び出しプロセスの直接の子として維持することによって、ストラスの目に見える影響を低減する。

「トラッカープロセス」はstraceを実行するプロセスですか?

「呼び出しプロセス」は「追跡プロセス」の親プロセスですか?

-D がなく、-D があるトラッカー、トレース先、呼び出しプロセス間の親と子の関係は何ですか?

ありがとうございます!

答え1

トレースプロセスは実行中のプロセスですstrace。はい。呼び出しプロセスは開始されたプロセスstrace、通常シェルです。

そうでない場合、-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

次に実行する-Dことは、子プロセスが呼び出されたときに予想される親プロセスを見つけて停止し、続行すると子プロセスが正しく機能することを意味しますgetppid()。これは、プロセスとその子の間を補間するSIGCHLDときにstrace、その子が親を見つける必要がある場合に重要です。

関連情報