【问题标题】:How to prevent Console Application from terminating when pressing "Ctrl+C" in C?在 C 中按“Ctrl+C”时如何防止控制台应用程序终止?
【发布时间】:2013-12-01 13:41:11
【问题描述】:

我发现在 Windows 上从 GCC 编译的控制台应用程序总是在按下 Ctrl+C 时终止。

是否有任何可行的方法来防止控制台应用程序在按Ctrl+C时终止?

【问题讨论】:

    标签: c winapi mingw32


    【解决方案1】:

    当用户按下控制 C 时,会向您的进程发送一个信号 (SIGINT)。当大多数信号被发送到一个进程时,该进程必须要么处理信号,要么操作系统将杀死它。所以...您需要做的就是为 SIGINT 安装一个信号处理程序。

    以下内容未经测试:

    #include <signal.h>
    static void ignore_control_c(int sig)
    {
        /* re-arm the signal handler but otherwise ignore the signal */
        signal(sig, ignore_control_c);
    }
    
    int main(int argc, char *argv)
    {
       signal(SIGINT, ignore_control_c);
       ...
    

    【讨论】:

    • 我已经添加了#include&lt;windows.h&gt;,但是GCC报告了error: 'SIGINT' undeclared (first use in this function)
    • 您是否还包括了 ?如果是这样,请查看内部并找到信号 2 的标签。我看到一些参考建议 mingw32 改变了一些东西并可能对该信号使用 SIGKILL ——这违反了惯例。主要任务是识别正在接收的信号并捕获它。
    【解决方案2】:

    安装 SIGINT 处理程序。默认情况下,此处理程序设置为终止您的进程。对于 windows,您可以使用 Win32 特定的SetConsoleCtrlHandler(..) 注册。

    查看上面链接的文档,尤其是示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 1970-01-01
      • 2010-12-19
      相关资源
      最近更新 更多