为什么当我按 CTRL+C 时 mingw-w64 mintty 不向我的程序发出信号()?
Why does mingw-w64 mintty not signal() my program when I CTRL+C?
当我按下 CTRL+C 时,MinTTY 似乎没有向我的 mingw-w64 程序发出信号。在具有相同相同程序的 CMD 中,信号 是 正确发出。这是为什么?
程序是在msys2 mingw-w64下用g++ -static -static-libstdc++ -std=c++14 -Wall -Wextra -pedantic testan.cpp
编译的。在这两种情况下,signal()
都没有 return 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 输出:
$ ./a.exe
waiting for CTRL+C
waiting for CTRL+C
waiting for CTRL+C
$
命令输出:
C:\Users\Xunie\Desktop\project>a.exe
waiting for CTRL+C
waiting for CTRL+C
Interrupt: 2
C:\Users\Xunie\Desktop\project>
MinTTY 是面向 POSIX 的终端仿真器,它使用 Cygwin/MSYS2 PTYs,不能很好地与本机(非 Cygwin 非 MSYS2)程序交互。这包括信号、交互式输入的检测等 MinTTY doesn't attempt to fix this,但 Cygwin 最近(自 v3.1.0 起)通过使用新的 ConPTY API 改进了对此用例的支持。截至 2020 年 5 月,MSYS2 尚未将这些更改集成到其运行时中,因此您还看不到其中的好处。同时(以及旧的 Windows 版本),您可以使用 winpty 包装器,可使用 pacman 安装。
当我按下 CTRL+C 时,MinTTY 似乎没有向我的 mingw-w64 程序发出信号。在具有相同相同程序的 CMD 中,信号 是 正确发出。这是为什么?
程序是在msys2 mingw-w64下用g++ -static -static-libstdc++ -std=c++14 -Wall -Wextra -pedantic testan.cpp
编译的。在这两种情况下,signal()
都没有 return 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 输出:
$ ./a.exe
waiting for CTRL+C
waiting for CTRL+C
waiting for CTRL+C
$
命令输出:
C:\Users\Xunie\Desktop\project>a.exe
waiting for CTRL+C
waiting for CTRL+C
Interrupt: 2
C:\Users\Xunie\Desktop\project>
MinTTY 是面向 POSIX 的终端仿真器,它使用 Cygwin/MSYS2 PTYs,不能很好地与本机(非 Cygwin 非 MSYS2)程序交互。这包括信号、交互式输入的检测等 MinTTY doesn't attempt to fix this,但 Cygwin 最近(自 v3.1.0 起)通过使用新的 ConPTY API 改进了对此用例的支持。截至 2020 年 5 月,MSYS2 尚未将这些更改集成到其运行时中,因此您还看不到其中的好处。同时(以及旧的 Windows 版本),您可以使用 winpty 包装器,可使用 pacman 安装。