第一句子网 - 唯美句子、句子迷、好句子大全
第一句子网 > java signal信号_Java Signal实例

java signal信号_Java Signal实例

时间:2021-08-08 09:05:09

相关推荐

java signal信号_Java Signal实例

TimYang在博文《降低应用latency方法谈》

中提到对Java方法进行Profiling,在某些场景更倾向于采用纯Java工具类的方法,比如通过给进程发Signals来实现,以求动态地打开或关闭Profiler。

感觉这个思路不错,以下是一个大致实例:

SignalTest.java

/**

*

*/

package signal;

import java.util.Observable;

import java.util.Observer;

import sun.misc.Signal;

import sun.misc.SignalHandler;

/**

* @author xuanyin

*

*/

public class SignalTest implements Observer {

/**

* @param args

*/

public static void main(String[] args) {

new SignalTest().go();

}

private void go() {

try {

HandlerTest sh = new HandlerTest();

sh.addObserver(this);

sh.handleSignal("HUP");

sh.handleSignal("BUS");

System.out.println("Sleeping for 60 seconds: hit me with signals!");

Thread.sleep(60000);

} catch (Throwable x) {

x.printStackTrace();

}

}

/**

*

*/

@Override

public void update(Observable arg0, Object arg1) {

System.out.println("Received signal: " + arg1);

}

/**

* HandlerTest Class

*/

class HandlerTest extends Observable implements SignalHandler {

@Override

public void handle(Signal signal) {

setChanged();

notifyObservers(signal);

}

/**

*

* @param signalName

* @throws IllegalArgumentException

*/

public void handleSignal(String signalName) throws IllegalArgumentException {

try {

Signal.handle(new Signal(signalName), this);

} catch (IllegalArgumentException x) {

throw x;

} catch (Throwable x) {

throw new IllegalArgumentException("Signal unsupported: "+signalName, x);

}

}

}

}

首先运行执行上述程序,然后查看其系统进程号。

如,若是4089,则在终端中执行kill -s BUS 4089

Java程序输出:Received signal: SIGBUS

信号具有平台相关性,不同平台下能使用的信号种类是有差异的。

Linux下支持的信号:

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

不足之处欢迎大家留言指正:)

3

0

分享到:

-08-10 14:41

浏览 10828

评论

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。