2011-08-05 14 views
7

SIGTRAPシグナルのためにプロセスが現在停止していて、kill()を介してSIGSTOPシグナルが送られた場合、デフォルトの動作は何でしょうか? SIGSTOPはプロセスが再開した後に配信される保留中のシグナルですか?それとも、無視されるか無視されますか?POSIXシグナルの振る舞い

SIGSTOPがキューに入れられている場合、そのプロセスの外部からトレースプロセスなどでキューから削除する方法はありますか?信号(7)のmanページから

+0

私は正式な回答を掘り下げることができませんでした。 OpenBSDのマニュアルページは何が起きるかもしれないことを示唆していますが、確かにそれを一方向に答えるわけではありません。 http://www.openbsd.org/cgi-bin/man.cgi?query=sigaction&apropos=0&sektion=0&manpath=OpenBSD+Current&arch=i386&format=htmlおよびhttp://www.openbsd.org/cgi-bin/manを参照してください。 .cgi?query = sigsuspend&sektion = 2&arch = i386&apropos = 0&manpath = OpenBSD + Current – wallyk

答えて

3

The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored. 

アプリで簡単なテストがブレークポイントで停止し、それをSIGSTOPを送信するには、私が「次の」ヒット時にいくつかの情報を表示するGDBを示しています。信号は明らかにアプリに配信されました。 SIGCONTを送信するまで、デバッグを続けることはできません。

(gdb) next 
Program received signal SIGSTOP, Stopped (signal). 
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28 
(gdb) next 
Program received signal SIGCONT, Continued. 
fill (arr=0x7fffffffdff0, size=5) at tmp.cpp:28 
(gdb) next 
(gdb) 
0

「SIGTRAP信号によって停止しました」とはどういう意味ですか? SIGTRAPはプロセスを停止しません。デフォルトではコアダンプで終了するか、シグナルを無視するかシグナルハンドラを呼び出すように変更することができますが、SIGTRAP自身がプロセスを停止することはありません。プロセスが他のプロセス(デバッガなど)によってptrace(2)でトレースされている可能性があります。この場合、SIGTRAPを配信する直前に停止しますが、その場合はptraceの制御下にあります。処理を続行するPTRACE_CONTまたは他のptraceアクションがあるまで続けます。

+0

私は別のプロセスをトレースしてデバッガとして動作しているので、プロセスがブレークポイントに達するとSIGTRAPが送られ、プロセスは停止します。だから私はちょうどそれが停止されていることを知りたいし、そのSIGTRAP信号が配信されている、SIGSTOPがプロセスに配信されている場合はどうなるでしょうか?プロセスが既に停止しているため、プロセスは保留中ですか、または破棄されますか? – ayelder