CTRL+C не работает в msys2
Я использовал Msys1 в течение многих лет и использовал CTRL+C для уничтожения процессов, которые я запускаю в своей оболочке.
После обновления с Msys1 до Msys2 CTRL+C больше не работает. Например: я запускаю "make", нажимая CTRL+C. Оболочка предлагает завершить и позволяет вводить больше команд, но make.exe все еще работает + работает.
Результат моего анализа:
В Msys1: shell.exe(12345) запускает make.exe(23456), а make.exe(23456) содержит информацию о том, что его родитель (12345).
В Msys2: shell.exe(12345) запускает make.exe(23456), а make.exe(23456) содержит информацию о том, что его родителем является (34567), которого больше нет в живых. Поэтому я предполагаю, что Msys2 использует дополнительный процесс для запуска подпроцессов.
Я пытался bash.exe, shell.exe, mintty.exe,... все, кажется, имеют те же проблемы.
Контент, который я нашел в поиске:
Этот билет просто фокусируется на пропущенных типах сигналов -> Меня это не волнует.
https://sourceforge.net/p/msys2/tickets/135/
Проблема в этом списке рассылки, кажется, близка к моей проблеме, но я не понимаю, что я должен изменить, или если изменение может быть сделано только в реализации msys2. (Что такое CREATE_NEW_PROCESS_GROUP? И как его изменить):
https://www.cygwin.com/ml/cygwin/2012-08/msg00062.html
С наилучшими пожеланиями Люк
2 ответа
Похоже, что mintty предоставляет терминал по умолчанию для MSYS2 (обратите внимание, что это отличается от оболочки, которая запускается внутри). Если это так, то проблема "Ctrl+C убивает собственные (например, скомпилированные MSYS2) программы вместо того, чтобы отправлять перехватываемый сигнал", та же, что описана на https://superuser.com/questions/606201/how-to-politely-kill-windows-process-from-cygwin и FAQ по портированию вики MSYS2.
Если то, что вы пытаетесь, работает, когда вы используете терминал Windows по умолчанию (например, при использовании cmd.exe
из меню "Пуск"), то это проблема, которую вы видите.
На самом деле это предлагается в другом ответе , но вы можете просто запустить каждую программу с помощью winpty.exe, что снова заставит CTRL-C работать.