2015-03-25 109 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。正如代码中提到的那样,您需要在那里实现自己的适当处理。