由于在学习Java中的信号处理时,您会发现重复的无限期,因此建议您避免编写直接依赖于信号的Java代码。一般的最佳实践是通过注册关机钩子来允许JVM在+和其他信号上正常退出。直接处理信号会使 Java 程序依赖于操作系统。ctrlc
但有时这没关系,你真的,真的想自己处理信号。
即使它没有作为官方JDK API的一部分公开,JVM的某些部分也必须处理信号(为了触发关闭钩子并退出),并且该组件是。尽管这是一个实现细节,因此可能会更改,但在实践中不太可能。如果要更改它,则需要用等效的机制替换它,并且可能记录在 Java 平台故障诊断指南中。sun.misc.Signal
同级类被广泛使用,并且同样未记录。在尝试删除此类方面正在积极开展工作,因为它“成为非标准但必要的方法的'倾倒场'”,但目前的提案虽然限制了一些非标准API,但默认情况下保留了两者并可用。实际阻止访问这些类的早期计划仍将包含一个命令行标志,以允许访问它们以实现向后兼容性。sun.misc.Unsafe
sun.misc.Unsafe
sun.misc.Signal
简而言之,虽然您不能依赖并且必须为这种行为发生变化的可能性进行规划,但在JDK 10之前,这种行为极不可能改变,如果它确实如此,可能会引入一种新的,更好的机制,或者如果需要,会有一种合理的方法来重新启用它。sun.misc.Signal
但是,明智的做法是将依赖于任何类的代码划分为尽可能小的范围 - 创建一个用于信号处理的包装API,以便调用方不需要直接与.这样,如果 API 发生变化,您只需要更改包装器的实现,而不是所有信号处理代码。sun.misc
sun.misc