java - 关于 JVM 信号处理

标签 java linux process jvm shutdown

我想禁用像 SIGINT 这样的信号,它是通过按 CTRL_C 发送的,还有其他将终止 JVM 的信号。我在此处阅读了有关-Xrs 选项的信息

http://docs.oracle.com/javase/7/docs/technotes/tools/windows/java.html?cm_mc_uid=30731201786714525992590&cm_mc_sid_50200000=1461656557

但是好像对JVM/进程终止没有影响。 我启动了程序 jar,如 java -Xrs -jar avoid-signals.jar
我在linux上。 有什么建议吗?

最佳答案

Xrs 的文档说

Reduces use of operating-system signals by the Java VM.

这意味着 JVM 只安装了较少的自己的信号处理程序。更少的信号处理程序仅仅意味着更多的信号通过它们的 default action 处理。 .在许多情况下,这会导致进程终止。

可以通过 signal mask 抑制信号, 通过 signal handler 处理或其他各种方式。

目前 JDK 不提供公共(public) API,但您可以使用不受支持的内部 API (sun.misc.SignalHandler) 或 jnr-posix .

或者如果您主要关心 Ctrl+C 和其他击键而不是真正的信号本身,您可以通过 nohup java -jar ... >/dev/null & 从控制台分离 java 进程>

关于java - 关于 JVM 信号处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36858948/

相关文章:

java - 在activeJDBC中获取带有offset和orderBy的记录

linux - 从 CRAN Ubuntu 存储库安装 R : No Public Key Error

c - 关于操作系统的进程安排?

c - 如何使用 struct sigaction 和 struct itimerval 一次处理两个信号?

linux - 更少的 ubuntu CSS(和自动编译)?

C:处理多个管道时 write() 的行为很奇怪

process - 在C#中启动非exe进程时可以使用模拟吗?

java - 为什么我收到错误 "non-static variable this cannot be referenced from a static context"?

java - 如何在不使用按钮的情况下从 JList 中选择项目?

java - 如何检查 Handler 是否有 Activity 任务?