如果一个进程因为SIGTRAP信号而被停止,然后通过kill()发送了一个SIGSTOP信号,那么默认的行为是什么?SIGSTOP会成为一个待处理信号,在进程再次运行时被传递吗?还是会被丢弃/忽略?
如果SIGSTOP排队了,是否有任何方法可以从该进程外部(如在跟踪进程中)将其从队列中删除?
如果SIGSTOP排队了,是否有任何方法可以从该进程外部(如在跟踪进程中)将其从队列中删除?
来自信号(signal)手册页面(signal(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)