java程序捕获kill信号
2012-07-04 15:45
2051 查看
package com.ashu.test; import sun.misc.Signal; import sun.misc.SignalHandler; @SuppressWarnings("restriction") public class TestSignal implements SignalHandler { private void signalCallback(Signal sn) { System.out.println(sn.getName() + "is recevied."); } @Override public void handle(Signal signalName) { signalCallback(signalName); } public static void main(String[] args) throws InterruptedException { TestSignal testSignalHandler = new TestSignal(); // install signals Signal.handle(new Signal("TERM"), testSignalHandler); Signal.handle(new Signal("USR1"), testSignalHandler); Signal.handle(new Signal("USR2"), testSignalHandler); for (;;) { Thread.sleep(3000); System.out.println("running......"); } } }
testSignal重写了SignalHandler的handle方法,捕获到的kill信号也是最终在handle里处理。
在main里注册了三个kill信号:TERM(kill -15)、USR1(kill -10)、USR2(kill -12)
补充1:
在Linux下支持的信号(具体信号kill -l命令查看):
SEGV, ILL, FPE, BUS, SYS, CPU, FSZ, ABRT, INT, TERM, HUP, USR1, USR2, QUIT, BREAK, TRAP, PIPE
在Windows下支持的信号:
SEGV, ILL, FPE, ABRT, INT, TERM, BREAK
补充2:
运行中可能会抛出异常:
java.lang.IllegalArgumentException: Signal already used by VM: USR1
这是因为某些信号可能已经被JVM占用,可以考虑用其它信号代替
相关文章推荐
- java程序捕获kill信号
- Java命令行程序阻断操作系统Ctrl+C/kill命令等信号
- [导入]java中如何执行本地程序并捕获out和err输出
- 使用Fiddler捕获Java程序中的HTTP请求
- Linux 下程序崩溃的信号捕获类
- Linux 脚本和程序对SIGINT的处理方案,脚本通过kill给程序传递信号
- java 程序中try catch / throw / 函数名上throws 具体执行顺序和扔异常捕获异常的概念模型
- 如何在linux程序中捕获异常信号
- Java程序运行过程中的异常捕获
- Java中无法捕获C程序printf输出的问题
- Linux Linux程序练习十三(信号阻塞,捕获)
- java中对于多线程程序的捕获异常的方案
- linux捕获KILL命令的信号
- Python中kill传送程序 signal HUP信号 程序重载配置文件
- 捕获SIGUER1和SIGUSR2的简单程序 | 信号处理程序 | signal函数
- Linux程序的常用信号中断捕获代码
- 程序捕获退出信号(SIGINT,SIGQUIT,SIGTERM)
- ★实验10-1 1. 编写程序测试函数setitimer(int)和getitimer()。 2. 安装信号, 使信号SIGALRM、SIGVTALRM、SIGPROF可以被捕获。 #include
- 如何在go程序中捕获退出信号
- java_linux_shell_定时kill 启动java程序