微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我使用以下代码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的更多信息.

原文地址:https://www.jb51.cc/bash/384891.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐