当前位置: 首页 > 知识库问答 >
问题:

Java应用程序在Ubuntu 12.04上不接收信号

景昊焜
2023-03-14

奇怪的问题

我试图关闭我的Java应用程序正确接收信号,要么通过杀死手动发送。我试图杀死SIGTERM、SIGHUP、SIGINT等。每次JVM停止而不调用运行时关闭钩子时,最终阻止或信号陷阱在Java代码中创建。

    Runtime.getRuntime().addShutdownHook(new Thread("Shutdown hook") {
        @Override
        public void run() {
            vd.pretendRemoveAll();
        }
    });

并在shutdownHook不起作用时添加了处理程序

    SignalHandler h = new SignalHandler() {
        @Override
        public synchronized void handle(Signal sig) {
            _logger.warn("Received signal: {}", sig);
            vd.pretendRemoveAll();
            System.exit(0);
        }
    };
    Signal.handle(new Signal("INT"), h);
    Signal.handle(new Signal("KILL"), h);
    Signal.handle(new Signal("HUP"), h);
    Signal.handle(new Signal("TERM"), h);

我在Ubuntu 12.04上运行,Java版本为“1.6.0_24”

OpenJDK运行时环境(IcedTea6 1.11.5)(6b24-1.11.5-0ubuntu1~12.04.1)

OpenJDK 64位服务器虚拟机(构建20.0-b12,混合模式)

我也尝试了OracleJavajdk1.60_37,效果相同

当我在这个过程中使用strace来查看发生了什么时,我得到了:

user@server:~/appdir$sudo strace-v-p 32277进程32277已连接-中断quitfutex(0x7f667f07d9d0,FUTEX_WAIT,32278,NULL)=?ERESTARTSYS(待重新启动)--SIGTERM(终止)@0(0)--futex(0x7f667e2543e0,futex_WAKE_PRIVATE,1)=1 rt_sigreturn(0x7f667e2543e0)=202 futex(0x7f667f07d9d0,futex_WAIT,32278,NULLPANIC:附加pid 32277与143一起退出

这种恐慌看起来很可疑,但我不知道接下来会发生什么。

我在Mac上测试了代码,没有问题。你知道是什么导致了这个问题,以及如何解决这个问题吗?是否需要设置某些安全功能/策略?

共有1个答案

端木骞尧
2023-03-14

这段代码来自http://hellotojavaworld.blogspot.fr/2010/11/runtimeaddshutdownhook.html,在Ubuntu上运行良好,jdk 1.6.30,你如何调用addShutdown Hook方法?您必须在类指导中,而不是静态主方法中。

public class AddShutdownHookSample {
 public void attachShutDownHook(){
  Runtime.getRuntime().addShutdownHook(new Thread() {
   @Override
   public void run() {
    System.out.println("Inside Add Shutdown Hook");
   }
  });
  System.out.println("Shut Down Hook Attached.");
 }
public static void main(String[] args) throws InterruptedException {

  AddShutdownHookSample sample = new AddShutdownHookSample();
  sample.attachShutDownHook();
        Thread.sleep(1000*60*1);
            //Print a message
  System.out.println("Last instruction of Program....");
  System.exit(0);
 }}
 类似资料:
  • 我知道我可以设置click_action,但这只是为了定制哪些活动将在通知点击时启动,我需要一些将在通知收到时自动启动的东西。 我尝试了quick start messaging firebase示例,其中有一个onMessageReceived()方法,但它仅在应用程序处于前台时才起作用。是否有一些东西将执行同时应用程序在后台?GCM可以通过直接从接收到通知时调用的广播接收器启动活动意图来完成我

  • 几天前,我发布了这个问题,来自Azure IOT中心的短信 我曾尝试实现建议的logic app,我的问题是logic app没有通过服务总线接收任何消息,事实上没有消息到达服务总线。当我尝试在logic应用程序中运行触发器时,它会弹出一个对话框,告诉我“When_a_message_is_received_in_a_queue”。当我运行logic应用程序时,它说工作流程在几分钟后超时。 我复制

  • 我试图使用我的手机作为GSM调制解调器。我使用SMSLib发送和接收短信用这个调制解调器。问题是,当我的手机(GSM调制解调器)收到短信时,我没有用SMSL通知ib.but代码整体是好的,例如当GSM调制解调器收到呼叫时通知我。我的代码没有任何错误,因为我只使用SMSLib示例代码接收消息。SMSLib示例代码是: 程序输出例如: modem.com4的网关状态更改,旧:停止- 调制解调器信息:制

  • 我正在iOS8+上使用最新的试用版PubNub,Xcode7.3,试图建立一个聊天应用程序。我正在评估PubNub作为另一个聊天服务器的替代方案。 我遵循了PubNub文档中关于苹果推送通知的说明,但我的应用程序在后台时从不接收推送通知。 我已经创建了p12证书并将其导入到PubNub密钥集中。我在Xcode常规设置中启用了推送通知。我已经编写了PubNub文档中指定的Swift代码。我能够成功发

  • 我有一个指向Play商店应用程序的链接,该应用程序以“内部版本”发布,例如 https://play.google.com/store/apps/details?id=com.redacted 单击此链接所需的结果是打开Play商店到此应用程序的详细信息/安装页面。这在桌面浏览器和Android浏览器上都工作正常。 如果您在浏览器外的Android设备上单击此链接,例如从电子邮件应用程序,此链接应

  • 但我不断得到以下错误 16/03/30 11:57:07错误executor.coarsegrainedexecutorbackend:驱动程序10.225.46.84:60637已断开关联!关机。 此外,cassandra连接,然后断开 我不知道这里似乎有什么问题,因为我以前运行过这个应用程序,它成功地运行了 使用的POM是