Запрещение MSYS 'bash' уничтожать процессы, которые перехватывают ^ C

У меня есть консольное приложение Windows (перенесенное из Unix), которое изначально было разработано для выполнения чистого выхода при получении ^ C ( Unix SIGINT ). Чистый выход в этом случае включает ожидание, потенциально довольно долгое, закрытия удаленных сетевых подключений. (Я знаю, что это не нормальное поведение ^ C , но я не могу его изменить.) Программа однопоточная.

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

Очень вероятно, что люди захотят запустить эту программу под MSYS bash. Кроме того, этот эффект нарушает набор тестов. Мне не удалось найти способ обойти эту проблему ни в программе (идеально), ни с помощью настроек оболочки (приемлемо). Кто-нибудь может что-нибудь порекомендовать?

33
задан zwol 4 September 2011 в 20:55
поделиться