我正在研究一个由 Java 编写的 linux 守护进程。如果当前用户注销,我需要捕获信号并将一些消息发送到远程服务器。如何在 Java 代码中捕获当前用户注销信号? SIGHUP 信号可以工作吗?任何人都可以提供一些线索吗?
非常感谢。
最佳答案
您可以注册一个信号处理程序来处理 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('.');
}
}
}
要测试你可以那样运行它
- 在 session 1 中:运行演示
java SigHupDemo
- 在 session 2 中:kill -s HUP $PID_OF_SIGHUPDEMO
发送 SIGHUP 后, session 1 中的输出将如下所示
....got a SIGHUP
...
如果 JVM 收到 SIGHUP
,该演示只会打印 got a SIGHUP
。如代码中所述,您需要在那里实现自己的适当处理。
关于java - 如何在 Java 守护进程中捕获 linux 用户注销信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29253398/