java - CTRL+C在jline2中是如何处理的

标签 java unix sigint shutdown-hook jline

我很难理解 CTRL+C 在 jline2 中是如何处理的。我在 consoleReader.readline 中发现,如果 handleUserInterrupt 设置为 true,则会抛出异常。但是我想知道在抛出这个异常之前,CTRL+C 是如何被捕获和解释的(而不是退出程序)?

最佳答案

UserInterruptException只会从 ConsoleReader.readLine 之一抛出方法并且仅当用户按下 CTRL+ChandleUserInterrupt 时设置为真(通过调用 consoleReader.setHandleUserInterrupt(true) )。

在 UNIX 平台上

仅当 ConsoleReader 的终端是 UnixTerminal 的实例(UNIX 平台的默认终端),它是 disableInterruptCharacter readLine 时调用方法叫做。此方法通过向系统执行适当的命令(通过使用 stty )来禁用 CTRL+C 的默认行为(通常会导致 JVM 退出)。在 readLine 之前方法返回,它调用 enableInterruptCharacter终端的方法,启用 CTRL+C 的默认行为。

这意味着 CTRL+C 的默认行为仅在 readLine 时被禁用方法正在执行。

关于java - CTRL+C在jline2中是如何处理的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33792791/

相关文章:

java - 简单的字符串比较问题

Java JFreeChart : customize tooltip screen position

bash - 查找不到一周前创建的目录

在 C 中导致 gets() 在 SIGINT 时退出

java - 如何转换和写入大图像而不导致 OOM 错误?

java - 更改 Java 版本 (Mac)

c - 坚持在 C 中使用多个管道

regex - 用于搜索给定模式的段落的 Shell 脚本

python - 捕获 SIGINT 并调用对象中的方法

C++:SIGINT后继续执行