我有一个控制台模式 Windows 应用程序(从 Unix 移植),最初设计用于在收到^C(Unix SIGINT
) 时执行干净退出。在这种情况下,一个干净的退出涉及等待,可能相当长的时间,以关闭远程网络连接。(我知道这不是正常的行为,^C但我无法改变它。)该程序是单线程的。
我可以^C使用signal(SIGINT)
(如在 Unix 下)或使用SetConsoleCtrlHandler
. 当程序在 CMD.EXE 下运行时,两者都可以正常工作。但是,如果我使用 MSYS 附带的“bash”外壳(我使用 MinGW 环境来构建程序,因为这允许我重用 Unix makefile),那么程序会被强制终止一些随机的、短时间(小于100 毫秒)之后^C。这是不可接受的,因为正如我所提到的,程序需要等待远程网络连接关闭。
人们很可能希望在 MSYS bash 下运行这个程序。此外,这种效果会破坏测试套件。我无法从程序内部(理想)或通过 shell 上的设置(可接受)找到解决问题的任何方法。任何人都可以推荐任何东西吗?