Почему mintw-w64 mintty не сигнализирует () моей программе, когда я нажимаю CTRL + C? - PullRequest
1 голос
/ 30 апреля 2020

MinTTY, похоже, не выдает сигнал моей программе mingw-w64, когда я нажимаю CTRL + C. В CMD с той же идентичной программой сигнал правильно повышен. Почему это так?

Программа скомпилирована в msys2 mingw-w64 с g++ -static -static-libstdc++ -std=c++14 -Wall -Wextra -pedantic testan.cpp. В обоих случаях signal() не возвращает SIG_ERR, поэтому кажется, что обработчик установлен правильно.


код:

#include <chrono>
#include <thread>
#include <iostream>
#include <csignal>
using namespace std;

void signalHandler( int x ) {
    cout << "Interrupt: " << x << endl;
    exit( 123 );
}

int main () {
    if( signal(SIGINT, signalHandler) == SIG_ERR )
        cout << "received SIG_ERR" << endl;

    while( true ) {
        cout << "waiting for CTRL+C" << endl;
        this_thread::sleep_for( 1s );
    }

    return 0;
}

mintty output:

$ ./a.exe
waiting for CTRL+C
waiting for CTRL+C
waiting for CTRL+C

$

Выход CMD:

C:\Users\Xunie\Desktop\project>a.exe
waiting for CTRL+C
waiting for CTRL+C
Interrupt: 2

C:\Users\Xunie\Desktop\project>

1 Ответ

0 голосов
/ 02 мая 2020

MinTTY - это эмулятор терминала, ориентированный на POSIX, использующий файлы Cygwin / MSYS2, которые плохо взаимодействуют с нативными (не Cygwin, не MSYS2) программами. Это включает в себя сигналы, обнаружение интерактивного ввода и т. Д. c. MinTTY не пытается исправить это , но Cygwin недавно (начиная с версии 3.1.0) улучшил поддержку этого варианта использования с помощью нового API ConPTY. По состоянию на май 2020 года MSYS2 еще не интегрировала эти изменения в свою среду выполнения, поэтому вы пока не видите преимуществ. В то же время (и в более старых Windows версиях) вы можете использовать оболочку winpty, которую можно установить с помощью pacman.

...