这个
pause()
除非调用信号处理程序,否则函数不会返回(请参见
specification
以及
man page
)
要使它在程序接收SIGCont后返回,必须安装SIGCont的处理程序。请尝试使用以下示例查看:
#include
#include
#include
#include
volatile int caught_signal = 0;
void handler(int sig)
{
caught_signal = sig;
}
int main()
{
signal(SIGCONT, handler);
pause();
printf("Caught signal: %d, %s\n",
caught_signal, strsignal(caught_signal));
return 0;
}
GDB 7.0的行为是正确的:
暂停()
完全忽略忽略的信号(如
SIGCHLD
,返回捕获的信号(
SIGCONT
,当
continue
发出命令。
(gdb) break 17
Breakpoint 1 at 0x80484b3: file pause.c, line 17.
(gdb) continue
Continuing.
^C
Program received signal SIGINT, Interrupt.
0x0012d422 in __kernel_vsyscall ()
(gdb) signal SIGCHLD
Continuing with signal SIGCHLD.
^C
Program received signal SIGINT, Interrupt.
0x0012d422 in __kernel_vsyscall ()
(gdb) signal SIGCONT
Continuing with signal SIGCONT.
Breakpoint 1, main () at pause.c:17
17 printf("Caught signal: %d, %s\n",
(gdb)