jvm - JVM 在接收到 POSIX 信号时终止
问题描述
我有一个使用 JNA 库从 Java 加载的本机 C 库。该本地 C 库在该引擎盖下使用了一些 POSIX 信号处理程序,该处理程序响应 SIGRTMIN +3 和可能的其他 SIGRTMIN + x。
当我在 Linux(64 位 Ubuntu)中从终端运行 java 程序时,程序终止并且在 shell 屏幕上我看到文本“实时信号 3”。似乎该库向其自己的进程发送了一个信号 SIGRTMIN +3,但它看起来像是终止了 JVM。
我可以看到这是怎么回事,因为我相信接收 SIGRTMIN + x 而没有关联处理程序的应用程序的默认处置应该终止应用程序。但是,在这种情况下,库想要处理信号,但 JVM 似乎在收到信号后终止。
1)我编写了一个快速而肮脏的应用程序,它只是在从 shell 启动应用程序后向进程发送 SIGRTMIN + 3(和其他 SIGRTMIN + x),并确认它确实终止了 java 应用程序。
2)我已经阅读了很多关于 java 如何提供“信号链”的文档,并尝试在使用 export LD_PRELOAD="...\libjsig.so "设置 libjsig.so 后启动 java 应用程序,但未能防止应用程序终止。
3) 根据我的阅读,JVM 似乎没有将 SIGRTMIN + 3 用于其内部目的,但在如何建议 JVM 仅链接 SIGRTMIN 而不是链接的方式上似乎没有太多文档只是终止。
有没有一种方法可以指示 JVM 不终止并允许本机库处理信号?
解决方案
推荐阅读
- mysql - 无法连接到Mysql服务器,没有设置root密码
- elasticsearch - 从索引/存储中过滤 Elasticsearch 字段
- android - 在 Recycler 视图项之间添加图像
- authorization - 使用社交身份验证限制访问静态网站的最简单方法是什么
- laravel - Laravel - 选择/加入朋友到帖子表
- git - Sourcetree 中的“修改最新提交”,创建不相关的错误
- c# - 如何编写 RedirectToAction 的扩展方法以在 Mvc 中设置 TempData?
- android - 后台线程中的位图操作使 UI 无响应
- python - 为什么我的 python 文件没有获取所有提交的数据?
- c# - 在 Unity 和 C# 中绘制圆