java程序捕获kill信号
2015-10-12 19:07
561 查看
[java] view
plaincopy
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占用,可以考虑用其它信号代替
版权声明:本文为博主原创文章,未经博主允许不得转载。
plaincopy
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
- java静态内部类
- java学习——jdk环境变量配置
- Java:java8 lambda retrolambda
- struts2中取得文件的绝对路径的方法
- java中Stack类的使用
- java中的堆和栈
- JAVA放射和字符串截取-----随笔
- java中的重写与重载
- spring框架之面试
- Hadoop启动报Error: JAVA_HOME is not set and could not be found解决办法
- java随机数生成的原理
- 想知道spring事务管理和任务调度的详细配置吗?
- JAVA三大框架SSH和MVC
- Java中Split函数的用法技巧
- Java中的static关键字解析
- springmvc 全局登陆 拦截器配置
- 万能的Java WebService调用程序支持C# JAVA WS调用
- Java设计模式 —— 原型模式(Proto Type)
- Struts2之文件下载