6

名前付きパイプを使用してC++アプリケーションと通信するJavaアプリケーションを作成しています。C ++アプリケーションが停止すると、JavaはSIGPIPEを取得し、Javaアプリケーションは停止します。

C / C ++では、その信号をキャッチして無視する方法を知っています。Android / Javaで同様のことを行うことは可能ですか?

4

1 に答える 1

1

これは実際には不可能のようです。利用可能な最善の解決策は、ここで説明するように、シャットダウンフックを追加し、アプリケーションを「正常に」再起動することです。

編集:

これが必要だったのは、(当時)FDとr/wを開いたJNIコードがあったからです。FDは名前付きソケット(Unixパイプ)に対して開かれ、パイプのリモート側(私の場合はデーモンまたはAndroid C /サービス)が接続を閉じる(または停止する)と、あなたの側が信号を受け取ります。これは必ずしも良いとは限りません。これを処理するのに最適なIMHOは、古き良きプレーンCコードのシグナルハンドラーを使用し、それを飲み込むことです(それ以外の場合は、アプリのJava側に通知する必要があります)。

http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java
于 2012-12-19T07:51:42.730 に答える