我正在编写一个 Java 应用程序,它使用命名管道与 C++ 应用程序进行通信。当 C++ 应用程序终止时,Java 会收到 SIGPIPE,Java 应用程序也会终止。
在 C/C++ 上,我知道如何捕获该信号并忽略它。是否可以在 Android/Java 上做类似的事情?
看来这确实不可能。可用的最佳解决方案是添加关闭挂钩并“优雅地”重新启动应用程序,如下所述:
EDIT:
我需要这个,因为(当时)我有 JNI 代码,我在上面打开了 FD 并对其进行读/写。 FD 被打开到一个命名套接字(一个 Unix 管道),当管道的远程端(在我的例子中是一个守护进程,或 Android C/服务)关闭连接(或死亡)时,你的一端将收到一个信号。这并不总是好的。恕我直言,处理这个问题的最佳方法应该是使用来自良好的旧纯 C 代码的信号处理程序,然后吞下它(否则 - 您应该通知应用程序的 Java 端)。
http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)