Tag: 信号

将SIGTERM发送到JVM是否安全

虽然JVM会将SIGTERM和类似信号转换为关闭挂钩 ,但许多服务关闭脚本使用TCP端口启动关闭。 (例如Tomcat的关闭端口, Java Service Wrapper ,JBoss的管理接口等) 所以我认为使用信号和关机钩子来优雅地关闭java服务是不鼓励的,直到我发现Play! 框架是使用关闭挂钩管理服务生命周期, play dist生成的启动脚本假定信号将被发送到JVM的PID。 我知道信号是依赖于平台的,并且使用TCP端口是一种以跨平台方式管理服务的简单且可扩展的方式,但我想知道它是多么安全以及我需要考虑哪些风险,当我依赖时在SIGTERM和关闭挂钩上作为服务关闭的主要方法。

处理Java虚拟机中的信号

是否可以在Java虚拟机中处理POSIX信号? 至少SIGINT和SIGKILL应该是完全独立于平台的。

如何从Java向外部进程发送SIGINT信号?

我有一个Java应用程序,它创建一个外部进程并通过InputStream读取进程’stdout。 当我完成它时,我需要能够杀死进程。 有没有办法向这个过程发送SIGINT信号? (好像我从控制台按下Ctrl + C)。 外部进程不是我的代码,我无法修改它。

如何在使用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发送的信号。 有任何想法吗? 谢谢。

sun.misc.Signal的替代品

我开始研究找到sun.misc.Signal类的替代方法,因为它可能在即将到来的JDK中不受支持(我们目前正在研究1.6)。 当我构建项目时,我得到: 警告:sun.misc.SignalHandler是Sun专有API,可能会在将来的版本中删除 我遇到了多种解决方案,但它们不适合我的项目,例如在这个问题中 。 这在我的情况下是不可接受的,因为: 信号不仅用于杀死应用程序 应用程序非常庞大 – 模块/ JVM之间的每次通信概念变化都需要数年时间才能实现 因此,理想的解决方案是找到像这个类的新Oracle版本或者以相同方式工作的东西。 这样的解决方案是否存在?

将信号发送到正在运行的JVM

我正在使用自定义信号处理程序来捕获自定义Java守护程序中的TERM,ABRT和INT信号。 我在代码中有这个处理程序,以便我可以向它发送TERM信号并通过kill命令正常关闭程序。 信号处理程序现在正常工作,但是当我编译代码时,我收到以下警告(多次): 警告:sun.misc.SignalHandler是Sun专有API,可能会在将来的版本中删除 使用这些类时: import sun.misc.SignalHandler; import sun.misc.Signal; 有没有更好的方法将信号发送到正在运行的JVM以启动主线程的关闭? 我不希望将我的代码绑定到此API,以便将来可以将其删除。 此代码现在使用1.5.0_22 JVM在Solaris和HPUX上运行。 任何帮助或建议将不胜感激。 我使用IBM的这个文档来开发信号处理程序: http://www.ibm.com/developerworks/java/library/i-signalhandling/

使用“TERM”进行信号处理

我有一个独立的应用程序,我必须提示用户使用确认对话框来保存他在尝试通过start–>shutdown系统时所做的更改。 我开始知道通过使用signalhandlers我们可以做到。 有人可以帮助我如何使用信号处理程序