我有一个控制台模式的Windows应用程序(从Unix移植而来),最初设计是在接收到^C(Unix中的SIGINT
)时进行干净的退出。在这种情况下,干净的退出涉及等待,可能需要相当长的时间,以关闭远程网络连接。(我知道这不是^C的正常行为,但我不能改变它。)该程序是单线程的。
我可以使用signal(SIGINT)
(与Unix下相同)或SetConsoleCtrlHandler
捕获^C。无论哪种方法,在CMD.EXE下运行程序时都能正常工作。但是,如果我使用带有MSYS的“bash” shell(我正在使用MinGW环境构建程序,因为这允许我重用Unix makefile),那么程序会在接收到^C后的某个随机短时间内(小于100毫秒)被强制终止。这是不可接受的,因为如我所提到的,该程序需要等待远程网络连接关闭。
很可能人们想在MSYS bash下运行此程序。而且,这种效果会破坏测试套件。我无法找到任何在程序内部(理想情况)或shell设置上解决问题的方法。有人能推荐什么吗?
<signal.h>
,但是当您在控制台窗口中键入control-C时,操作系统不会生成SIGINT
信号,因此它对您没有任何帮助。 - zwol<signal.h>
在Windows上与Microsoft CRT一起使用对我很有效。当我在控制台窗口中键入Ctrl+C时,使用signal()
注册的处理程序将被调用,并带有SIGINT
信号。 - Brian Nixon