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
、その子が親を見つける必要がある場合に重要です。