繁体   English   中英

Windows命令提示符如何处理连续的CTRL + C(SIGINT)信号?

[英]how does windows command prompt handle consecutive CTRL + C (SIGINT) signals?

我正在从Windows命令提示符下运行一个程序,当我按CTRL C,继续然后再次按CTRL C时,我得到一些奇怪的行为。

Ctrl C导致我正在使用的程序(icarus verilog)在我第一次按下ctrl C时暂停。然后键入“ cont”(icarus verilog命令在暂停后继续),然后退出该处理程序并重新进入主循环(我里面有打印语句,让我知道)这是第一次。

但是,第二次按CTRL + C不会击中SIGINT处理程序。

我想知道Windows是否以不同的方式解释第二个ctrl C事件,并且实际上向程序发送了不同的信号,或者发送了终止信号。

我打算发布主代码循环,但是我意识到我可以为读者简化事情。

此功能在这里:

extern "C" void signals_handler(int)
{
    printf("Inside Signals handler \n");
      schedule_stopped_flag = true;
}

第一次被CTRL C击中,但是第二次没有被击中。

通过在函数中传递此函数指针来附加它:

static void signals_capture(void)
{
      signal(SIGINT, &signals_handler);
}

可以在此处查看“信号”功能的文档: http : //www.cplusplus.com/reference/csignal/signal/

在代码中似乎没有任何地方分离信号处理程序。

看来您必须在激活处理程序后重新连接它。 我猜想操作系统正在删除它或其他东西,但这不是我正在查看的代码使它脱离连接的原因。 但是,按照以下网站的建议进行操作,然后重新尝试处理程序似乎可行。

http://www.geeksforgeeks.org/write-ac-program-that-doesnt-terminate-when-ctrlc-is-pressed/

一件事有些麻烦,那就是该文档: http : //en.cppreference.com/w/c/program/signal

声明“如果由于中止或引发而未调用信号处理程序(换句话说,信号处理程序是异步的),那么如果信号处理程序调用标准库中的任何函数(异常终止_Exit quick_exit信号除外),则行为未定义第一个参数不是当前处理的信号号。”

我的意思是,由于我要调用的信号的第一个参数与当前处理的信号的编号相同,因此我应该期待未定义的行为。 这有点麻烦,这让我想知道是否还有其他选择。 但是,目前看来,这是可行的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM