如何在使用bash脚本初始化的java应用程序中捕获SIGNAL
发布时间:2020-12-16 01:14:40 所属栏目:安全 来源:网络整理
导读:我使用以下代码在 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中捕获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的更多信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |