【问题标题】:Handling unix signals in Android在 Android 中处理 unix 信号
【发布时间】:2012-04-30 17:34:17
【问题描述】:

我正在编写一个使用命名管道与 C++ 应用程序对话的 Java 应用程序。当 C++ 应用程序终止时,Java 获得 SIGPIPE,Java 应用程序终止。

在 C/C++ 上,我知道如何捕捉该信号并忽略它。是否可以在 Android/Java 上做类似的事情?

【问题讨论】:

标签: android unix signals pipe


【解决方案1】:

这似乎是不可能的。可用的最佳解决方案是添加一个关闭挂钩并“优雅地”重新启动应用程序,如下所述:

编辑:

我需要这个,因为(当时)我有 JNI 代码,我在上面打开了一个 FD 和 r/w 到它。 FD 被打开到一个命名的套接字(一个 Unix 管道),当管道的远程端(在我的例子中是一个守护进程,或 Android C/服务)关闭连接(或死亡)时,你的一方将收到一个信号。这并不总是很好。恕我直言,最好的处理方法应该是使用来自好的旧纯 C 代码的信号处理程序,然后将其吞下(否则 - 您应该通知应用程序的 Java 端)。

http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java

【讨论】:

  • 这个答案引用了基于jvm的解释,这不一定适用于Android,因为虽然Android使用从Java编译和翻译的代码,但它实际上并不运行Java虚拟机,而是它自己的Dalvik(或最近的 Android Runtime)机器,它的行为有些不同。此外,很有可能 - 至少使用 NDK - 可以替换自己 DVM 进程中的任何信号处理程序。
  • 我并没有说它不起作用,而是该链接不完全适用,并且似乎有一些方法可以起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2019-08-04
  • 2012-04-14
  • 1970-01-01
  • 2017-05-06
相关资源
最近更新 更多