Windows で実行され、名前付きコンポーネントで構成される C++ ビルド システムを維持しています。しばらく前に Windows XP から Windows 7 にアップグレードしたとき、ビルドをキャンセルできるようになったことに気付きました。Eclipse の [キャンセル] ボタンは灰色になりますが、ビルドは常に最後まで実行されます。さらに、MSYS2 の代わりに MSYS を使用すると、Windows 7 でもビルドをキャンセルできますが、マルチコア ビルド (make -j4 など) は最初から (MSYS2 での作業中に) ハングすることがわかりました。マルチコアが必要なので、それは解決策ではありません。
いくつかの調査を行った結果、MSYS2 は WinAPI プロセス作成フラグ CREATE_NEW_PROCESS_GROUP を使用して make プロセスを開始するという結論に達しました。このフラグは Windows XP では実行されないと思われるため、Windows XP でカネリングが機能する理由を説明しています。
CREATE_NEW_PROCESS_GROUP が別の WinAPI 呼び出し SetConsoleCtrlHandler(NULL,TRUE) を引き起こし、これにより Ctrl-C が無効になり、プロセスは Ctrl-Break によってのみ終了される可能性があることを読みました。コマンド ラインからビルドをテストすることで、この動作を確認できます。
この問題の意図した解決策は何ですか? キャンセルを押したときに Eclipse が Ctrl-C の代わりに Ctrl-Break を送信することは可能ですか? それとも、MSYS2 の構成が間違っていて、ビルド プロセスで Ctrl-C を抑制すべきではないのでしょうか? それとも、私たちの分析はごみであり、問題はまったく別のものなのでしょうか?