2015-03-25 64 views
0

我正在研究由Java編寫的linux守護進程。如果當前用戶註銷,我需要捕獲信號並將消息發送到遠程服務器。如何在Java代碼中捕獲當前用戶註銷信號?信號SIGHUP可以工作嗎?任何人都可以提供一些線索?如何在Java守護進程中捕獲Linux用戶註銷信號?

非常感謝。

+0

你想處理SIGQUIT嗎?如果用戶關閉退出他的sessioin退出?以下我的解決方案不起作用。 – SubOptimal 2015-03-25 11:24:21

回答

1

您可以註冊一個信號處理程序來處理SIGHUP。

import sun.misc.Signal; 
import sun.misc.SignalHandler; 

public class SigHupDemo { 
    public static void main(String[] args) throws Exception { 

    // you can also register for "TERM" - SIGTERM 
    Signal.handle(new Signal("HUP"), new SignalHandler() { 
     public void handle(Signal sig) { 
     System.out.println("got a SIGHUP"); 
     // do what you want to do in such case 
     // also include to end your daemon 
     } 
    }); 

    for(int i=0; i<100; i++) { 
     Thread.sleep(1000); 
     System.out.print('.'); 
    } 
    } 
} 

要測試你可以在會話1運行這種方式

  • :運行演示java SigHupDemo
  • 在會議2:殺-s HUP $ PID_OF_SIGHUPDEMO

輸出在發送SIGHUP之後,在會話1中將會是這樣的:

....got a SIGHUP 
... 

如果JVM收到SIGHUP,演示將只打印got a SIGHUP。正如代碼中提到的那樣,您需要在那裏實現自己的適當處理。