关于 JVM 信号处理
Regarding JVM signal handling
我想禁用像 SIGINT
这样的信号,它是通过按 CTRL_C 发送的,还有其他将终止 JVM 的信号。我在这里
阅读了 -Xrs 选项
不过好像对JVM/process终止没有影响。
我像 java -Xrs -jar avoid-signals.jar
一样启动了程序 jar。
我在 linux。
有什么建议吗?
Xrs 的文档说
Reduces use of operating-system signals by the Java VM.
这意味着 JVM 只安装了较少的自己的信号处理程序。更少的信号处理程序仅仅意味着更多的信号是通过它们 default action 处理的。这在许多情况下会导致进程终止。
可以通过 signal mask, processed through a signal handler 或其他各种方式抑制信号。
目前 JDK 不提供 public API,但您可以使用不受支持的内部 API (sun.misc.SignalHandler
) 或 jnr-posix。
或者如果您主要关心 Ctrl+C 和其他击键而不是真正的信号本身,您可以通过 nohup java -jar ... > /dev/null &
从控制台分离 java 进程
我想禁用像 SIGINT
这样的信号,它是通过按 CTRL_C 发送的,还有其他将终止 JVM 的信号。我在这里
不过好像对JVM/process终止没有影响。
我像 java -Xrs -jar avoid-signals.jar
一样启动了程序 jar。
我在 linux。
有什么建议吗?
Xrs 的文档说
Reduces use of operating-system signals by the Java VM.
这意味着 JVM 只安装了较少的自己的信号处理程序。更少的信号处理程序仅仅意味着更多的信号是通过它们 default action 处理的。这在许多情况下会导致进程终止。
可以通过 signal mask, processed through a signal handler 或其他各种方式抑制信号。
目前 JDK 不提供 public API,但您可以使用不受支持的内部 API (sun.misc.SignalHandler
) 或 jnr-posix。
或者如果您主要关心 Ctrl+C 和其他击键而不是真正的信号本身,您可以通过 nohup java -jar ... > /dev/null &