我正在研究一个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。如代码中所述,您需要在那里实现自己的正确处理。

08-06 06:33