Una volta ogni tanto i programmi della console che eseguo non sono in grado di gestire Ctrl-C . Gli esempi sono cygwin
programmi, se li eseguo nella console anziché mintty
e lo strumento audio della riga di comando sox.exe
.
Di solito scrivo Win-R , cmd
, accedere e quindi avviare un programma.
Normalmente, quando esegui un Cygwin bash
shell in una console di Windows e premere ctrl-c, lo gestisce e ristampa il prompt, ma ora è terminato e mi viene richiesto Terminate batch job (Y/N)?
Normalmente, sox.exe
stampa un messaggio "abortito" in risposta a ctrl-c, ma ora si blocca e lo standard sox.exe has stopped working
Viene visualizzata la finestra della GUI.
Inoltre, se avvio alcuni programmi da a .bat
file, ho anche un altro popup: windows command processor has stopped working
Dopo il riavvio, tutto funziona di nuovo. Logoff / login o Switch utente non funzionano.
Anche il seguente semplice programma si arresta in modo anomalo sulla mia macchina, ma lo stesso binario riesce su un altro:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <windows.h>
#include <conio.h>
static BOOL WINAPI MyHandlerRoutine(
_In_ DWORD dwCtrlType
) {
switch (dwCtrlType) {
case CTRL_C_EVENT:
printf("ctrl-c pressed\n");
return TRUE;
case CTRL_BREAK_EVENT:
printf("ctrl-break pressed\n");
return TRUE;
}
return FALSE;
}
int main()
{
int c;
DWORD dw = 0;
BOOL b;
HANDLE hStdin = GetStdHandle(STD_INPUT_HANDLE);
b = GetConsoleMode(hStdin, &dw);
printf("GetConsoleMode() returned %d %u\n", (int)b, dw);
dw = dw & ~(ENABLE_LINE_INPUT | ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT);
dw = ENABLE_PROCESSED_INPUT;
SetLastError(0);
b = SetConsoleMode(hStdin, dw);
printf("SetConsoleMode(%u) returned %d\n", dw, (int)b);
if (!b) {
printf("GetLastError() returned %u\n", GetLastError());
}
b = SetConsoleCtrlHandler(MyHandlerRoutine, TRUE);
printf("SetConsoleCtrlHandler() returned %d\n", (int)b);
printf("press ENTER to exit\n");
for (;;) {
char buf[1];
c = getchar();
printf("%02x ", c);
// EOF == c ||
if (10 == c || 13 == c) break;
}
return 0;
}