2017-08-03 5 views
0

ptraceの文書によると、`PTRACE_TRACEME`でトレースするときにforkしたプロセスのSIGSTOP停止を無効にする

停止tracee次clone(2)で、自動的にはPTRACE_SEIZEが使用された場合SIGSTOP、又はPTRACE_EVENT_STOPで開始され、新たにクローニングされたプロセスを、トレースを開始します。

SIGSTOPは、ptraceが原因ではない可能性があります。ユーザーがこの信号をプロセスに送信することもできます。この場合、子プロセスがPTRACE_EVENT_STOPで停止していると完全ではありません。

子プロセスを自分で作成していますので、PTRACE_TRACEMEを使用して子プロセスをトレースすると、競合状態が発生しません。 PTRACE_SEIZEを代わりに使用すると主張すると、親プロセスでPTRACE_SEIZEを呼び出す前に子プロセスが既に終了している可能性があります。

PTRACE_TRACEMEでトレースすると、子プロセスがプレーンSIGSTOPを受け取らないようにする方法はありますか?

答えて

0

一言で言えば、できません。

しかし、良いニュースがあります。 Linuxのバージョン3.4以降、ptraceは新しい操作をサポートしています。PTRACE_SEIZE。これは子ではなく親からのものであるため、アタッチのセマンティクスは若干異なります。それ以外にも、いくつかの違いがあります。その1つは、この特定の問題を解決することです。

詳細については、マニュアルページを参照する必要があります。あなたがそれを使用すると、イベントが報告される方法についてのほとんどすべてが変更されています。この問題(同様のものと同様)が導入されたのはまさにその理由です。その問題が気になる場合は、間違いなくPTRACE_TRACEMEの代わりにPTRACE_SEIZEを必ず使用してください。

関連する問題