考虑到我需要在每个测试之间执行此操作,这非常麻烦。因此,我寻找了一种当您单击“停止”时CLion终止程序的方法,并发现它发送SIGINT信号,在这里:
单击此按钮可以通过标准关闭脚本外部终止当前进程。单击该按钮一次会调用软杀死以允许应用程序捕获SIGINT事件并执行优雅终止(在Windows上,Ctrl + C事件被模拟)。单击该按钮后,它将被替换为运行工具窗口kill图标,表示后续单击将导致强制终止应用程序,例如在Unix上发送SIGKILL。
然后,我尝试捕获它,但出于某些原因,它不起作用。所以我尝试创建一个新项目,其中我只是试图捕获SIGINT信号。以下是一个非常简单但无效的示例:
#include <iostream>
void signalHandling(int signal)
{
std::cout << "Signal : " << signal << std::endl;
}
int main() {
signal(SIGINT, signalHandling);
while (1)
{
;
}
}
我收到的信息只有:进程退出代码为1
。
所以,我的问题是:为什么我无法捕获由CLion发送的(或者至少应该发送的)这个信号呢?
如果可能与我的环境有关,那么我使用的是CLion 2018.1.5,我的工具链是Cygwin,我正在使用cmake 3.10.3。我正在使用Windows 10操作系统。
SIGKILL
。 - eerorikaSIGKILL
信号。我认为你应该尝试从普通控制台运行程序,并手动按下 Ctrl+C 发送SIGINT
信号。顺便问一下,为什么你设置了SIGQUIT
的处理程序而不是SIGINT
? - user7860670SIGQUIT
我的错误,只是尝试了一些东西并忘记将其改回SIGINT
。实际上,我按下了 CLion 的“停止”按钮,这个按钮应该发送信号。是的,我在普通控制台中。 - souki