java程序捕获kill信号

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占用,可以考虑用其它信号代替

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值