我正在研究一个linux守护进程,它是由Java编写的。如果当前用户注销,我需要捕获信号并向远程服务器发送一些消息。如何在Java代码中捕获当前用户的注销信号?信号灯能工作吗?有人能提供一些线索吗?
谢谢。
最佳答案
您可以注册一个信号处理程序来处理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
在第二节课中:杀戮-s HUP$PID_SIGHUPDEMO
会话1中的输出将是这样的,在您发出叹息之后
....got a SIGHUP
...
演示只在JVM收到
got a SIGHUP
时打印SIGHUP
。如代码中所述,您需要在那里实现自己的正确处理。