Java对信号的处理

本文主要包括Java如何处理信号,直接上代码。

 

1. 实现SignalHandler

package com.chzhao.SignalTest;

import sun.misc.*;

@SuppressWarnings("restriction")
public class TestSignal implements SignalHandler {

    public void handle(Signal arg0) {
        System.out.println(arg0.getName() + "is recevied.");
    }
}

2.主函数部分

package com.chzhao.SignalTest;

import sun.misc.*;

public class App {
    @SuppressWarnings("restriction")
    public static void main(String[] args) {
        TestSignal handler = new TestSignal();
        Signal.handle(new Signal("TERM"), handler);
        Signal.handle(new Signal("INT"), handler);
        Signal.handle(new Signal("USR1"), handler);
        Signal.handle(new Signal("USR2"), handler);
        for (;;) {
            System.out.println("do something");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

这里面注册了4个信号。

在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

 

posted @ 2014-11-19 10:58  wardensky  阅读(7496)  评论(0编辑  收藏  举报