当我在google搜索我的gdb和sigwait问题时,我发现了这个内核错误线程
GDB is not trapping SIGINT. Ctrl+C terminates program when should break gdb.
引用:
gdb将调试过程放在自己的pgrp中,并将终端设置为该pgrp。
当你点击C-c时,信号进入当前的pgrp,即进入已调试的进程,而不进入gdb。当传递信号时,ptrace将拦截它并让gdb在实际到达调试过程之前决定该做什么。
但是,您的程序使用sigwait,因此信号实际上从未传递过。相反,您通过sigwait将其出列,而无需通过实际的信号传递。 ptrace仅报告即将发送的信号。当您使用sigwait时,从技术上讲,信号一直被阻止,并且从未如此传递。
这条评论让我对信号和GDB的实际运作方式更加好奇,
1)“信号传递”和“信号排队”之间有什么区别?
2)当信号发送到调试过程时,GDB如何捕获信号?
谢谢,