gpt4 book ai didi

java - 如何在使用 bash 脚本初始化的 java 应用程序中捕获信号

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:55:08 25 4
gpt4 key购买 nike

我使用以下代码在 java 中捕获一个 INT 信号:

    Signal.handle(new Signal("INT"), new SignalHandler () {
public void handle(Signal sig) {

log.warn("Received SIGINT signal. Will teardown.");

task.tearDown();

// Force exit anyway
System.exit(1);
}
});

当我使用 java -jar file.jar 时启动我的应用程序,我可以捕获用 kill -INT PID 发送的信号.

如果我调用 java -jar file.jar & (jvm 在后台运行),我无法捕捉到 kill -INT 发送的信号.

有什么想法吗?

谢谢。

最佳答案

适合我。您确定要杀死正确的 pid 吗?在 Unix 上,您可以使用 $! 获取您启动的最后一个进程的 pid。

$ java -jar file.jar &
[1] 25573

$ kill -INT $!
Received SIGINT signal. Will teardown.

更新:

如果您通过 shell 脚本在后台启动它,操作系统将创建一个新的进程组,它将不受键盘生成的信号(如 SIGINT)的影响。只有进程组 ID 与当前终端的进程组 ID 匹配的进程才能接收到这些信号。

所以尝试像这样在当前终端的进程组中运行它:

. ./script.sh

然后您将能够发送 SIGINT。

有关作业控制的更多信息 here .

关于java - 如何在使用 bash 脚本初始化的 java 应用程序中捕获信号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4147288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com