signal訊號捕捉

來源:互聯網
上載者:User

Signal 顧名思義是訊號的意思,為什麼要用到這個東西了?

原因:由於現在在負責寫網遊的後台loginServer,裡面寫了不少設定檔,當我們的產品上線後,loginServer開啟後這時設定檔的資料就被讀取進去了,但是當我們想修改這些配置資料怎麼辦呢?不可能讓把loginServer關掉吧! 假如線上幾萬了,你導致關閉服務弄的幾千上萬的使用者進不去,你知道會損失多少使用者,多少錢嗎?還會被老闆搞死的..

有兩種方法:

1.Signal

2.通過協議發送一個訊息過來,然後重新讀取一下設定檔

如果朋友知道更好的辦法的朋友也希望能分享一下,告訴下我..

由於博文標題是signal訊號捕捉,第二種方法通過協議訊息來重新讀取配置資料,就不說了...

一、首先看下java中Signal枚舉有哪些各代表什麼含義:

USR1:使用者自訂訊號1
USR2:使用者自訂訊號2

推薦:使用者自訂訊號USR1和USR2,其他訊號我同事說可能會隱患別的問題,最好不用.

TERM:終止訊號

KILL:Kill訊號

INT:鍵盤中斷

HUP :終端掛起或者控制進程終止

BUS:匯流排錯誤

上面這5個出現的比較多,下面是其他的訊號

ALRM:警告

CHLD:子進程結束訊號

CONT:進程繼續(曾被停止的進程)

FPE:浮點異常

ILL:非法指令

IO:某I/O操作現在可以進行了

IOT:IO捕獲指令

PIPE:管道破裂: 寫一個沒有讀連接埠的管道

PROF:Profiling定時器到

PWR:電源故障

QUIT:鍵盤的退出鍵被按下

SEGV:無效的記憶體引用

STKFLT:副處理器堆棧錯誤

STOP:終止進程
TRAP:跟蹤/斷點捕獲

TSTP:控制終端(tty)上按下停止鍵

TTIN:後台進程企圖從控制終端讀

TTOU:後台進程企圖從控制終端寫

VTALRM: 實際時間警示時鐘訊號

WINCH:視窗大小改變

XCPU:超出設定的CPU時間限制

XFSZ:超出設定的檔案大小限制

二、老樣子上傳我的demo

package com.back;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.log4j.PropertyConfigurator;import sun.misc.Signal;import sun.misc.SignalHandler;/**** java訊號捕獲處理demo*/public class SignalHandlerExample implements SignalHandler {static Log log=LogFactory.getLog(SignalHandlerExample.class);private boolean Running = true; public SignalHandlerExample() { this.setupHandler(); } private void setupHandler() { this.handleSignal("INT"); this.handleSignal("TERM"); this.handleSignal("HUP"); } public void handleSignal(final String signalName) { try { Signal.handle(new Signal(signalName), this); } catch (IllegalArgumentException e) { // 可能這個訊號,並不支援這個平台或JVM作為目前配置 e.printStackTrace(); } } /** * 捕獲訊號 * @param signal The {@link sun.misc.Signal} that we received **/ public synchronized void handle(Signal signal) { // we are only interested in catching the "TERM" signal if ( signal.getName().equals("TERM") ) { log.info(" TERM received " + signal.getName() ); log.info("threadName" + Thread.currentThread().getName()); System.exit(-1); } else if ( signal.getName().equals("INT") ||signal.getName().equals("HUP") ) { setRunningStatus( false ); notifyAll(); //TODO - clarify if notify OR notifyall } log.info( signal.getName() + " " + signal.getNumber() ); log.info( getRunningStatus()+"" ); } public void setRunningStatus( boolean Status ) {this.Running = Status;} public boolean getRunningStatus() {return Running;} /** * General "clean up" method which is called when we receive a TERM signal * This will likely be superseeded by specific cleanup code * **/ public boolean cleanUp() { // TODO - we need to decide what we are going to do one we trap a // TERMinate signal. // We need to complete all our threads nicely. log.info("Cleaning up!"); return true; } public synchronized void myWait() { try{ wait(); }catch (InterruptedException e){ log.info( "myWait WOKEN UP" + e ); }} public static void main(final String[] args) {    PropertyConfigurator.configure("./config/log4j.properties"); SignalHandlerExample mySignalHandler = new SignalHandlerExample(); while ( mySignalHandler.getRunningStatus() ) {log.info("waiting");mySignalHandler.myWait();log.info("woken up");}}}

補充:sun.misc.Signal和SignalHandler引入不進來解決方案:

設定設計到了日誌的列印,如果不知道請參看我java日誌列印那篇文章

我們上次SignalTest.jar到linux伺服器上運行如下:

1.Ctrl+C:

2.INT:kill -s INT 連接埠號碼

這個時候我們就可以利用這種方式來重讀我們的設定檔了...

 

參看文章:

http://coding.derkeiler.com/Archive/Java/comp.lang.java.help/2006-10/msg00248.html

http://wangym.iteye.com/blog/733693

http://blog.chinaunix.net/uid-20441206-id-3138952.html

相關文章:

http://blog.csdn.net/qinghua9/article/details/5295934

http://www.csl.mtu.edu/cs4411.ck/www/NOTES/signal/install.html

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.