У меня есть консольное приложение Windows (портировано из Unix), которое изначально предназначалось для чистого выхода, когда оно получило ^C (Unix SIGINT
). Чистый выход в этом случае связан с ожиданием, возможно, довольно долгое время, когда удаленные сетевые подключения закрываются. (Я знаю, что это не нормальное поведение ^C, но я не в состоянии его изменить). Программа однопоточная.
Я могу ловить ^C с помощью signal(SIGINT)
(как в Unix) или SetConsoleCtrlHandler
. Либо работает правильно, когда программа запускается под CMD.EXE. Однако, если я использую оболочку "bash", которая поставляется с MSYS (я использую среду MinGW для сборки программы, так как это позволяет мне повторно использовать make файлы Unix), то программа принудительно завершает какое-то случайное, короткое время ( менее 100 миллисекунд) после ^C. Это неприемлемо, поскольку, как я уже упоминал, программе необходимо дождаться завершения удаленных сетевых подключений.
Очень вероятно, что люди захотят запустить эту программу в MSYS bash. Кроме того, этот эффект нарушает набор тестов. Я не смог найти какой-либо способ обойти проблему либо изнутри программы (идеально), либо с помощью настроек на оболочке (допустимо). Кто-нибудь может что-нибудь рекомендовать?