Como posso interceptar Ctrl + C(o que normalmente encerraria o processo) em um aplicativo Java CLI (interface de linha de comando)?
Existe uma solução multiplataforma (Linux, Solaris, Windows)?
Estou usando Console
o readLine()
, mas, se necessário, poderia usar algum outro método para ler caracteres da entrada padrão.
java
command-line
stdin
command-line-interface
copy-paste
ivan_ivanovich_ivanoff
fonte
fonte
Estou assumindo que você deseja desligar normalmente e não causar curto-circuito no processo de desligamento. Se minha suposição estiver correta, você deve consultar os Ganchos de desligamento .
fonte
A fim de ser capaz de lidar com Ctrl+ Csem desligar por algum motivo, você precisará usar alguma forma de tratamento de sinal (uma vez que a entrada Ctrl+ Cnão é realmente passada diretamente para seu aplicativo, mas em vez disso, é tratada pelo sistema operacional que gera um SIGINT que é então passado para Java.
Consulte http://www.oracle.com/technetwork/java/javase/signals-139944.html para obter detalhes sobre o tratamento de sinais.
(Se você deseja apenas desligar normalmente, a resposta de akf será suficiente.)
fonte
Alguns links sobre como lidar com o SIGTERM - esse é o sinal que o programa está recebendo no lado do sistema operacional:
http://blog.webinf.info/2008/08/intercepting-sigterm.html
http://java.sun.com/javase/6/webnotes/trouble/TSG-VM/html/signals.html
http://www.ibm.com/developerworks/java/library/i-signalhandling/
Isso deve funcionar em sistemas operacionais POSIX - ou seja, Mac e Unix devem funcionar, em windows não tenho certeza, lembro-me de ouvir que também é compatível com POSIX até certo ponto, mas pode variar muito com versões diferentes.
fonte