POSIX信号行为
如果一个进程当前由于SIGTRAP信号而停止,并且它通过kill()发送了SIGSTOP信号,那么缺省行为是什么? SIGSTOP是一个待处理的信号,在该过程继续之后交付? 或者它会被丢弃/忽略?
如果SIGSTOP排队,是否有任何方法将它从该进程外的队列中移出,例如在跟踪过程中?
从信号(7)手册页:
The signals SIGKILL and SIGSTOP cannot be caught, blocked, or ignored.
一个简单的测试,在断点处停止并发送一个SIGSTOP
显示当我点击'next'时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)
你是什么意思'由于SIGTRAP信号而停止'? SIGTRAP不会停止一个过程; 默认情况下它会以核心转储结束,或者您可以将其更改为忽略信号或调用信号处理程序,但在任何情况下SIGTRAP本身都不会停止该进程。 你可能会用一些其他进程(如调试器)跟踪进程,并在ptrace(2)之后进行跟踪,在这种情况下,它将在交付SIGTRAP之前停止,但在这种情况下,它将受到ptrace的控制,继续,直到有PTRACE_CONT或其他ptrace操作才能继续该过程。
链接地址: http://www.djcxy.com/p/8813.html