2012-04-19 2 views
4

나는 명명 된 파이프를 사용하여 C++ 응용 프로그램과 대화하는 Java 응용 프로그램을 작성 중입니다. C++ 응용 프로그램이 종료되면 Java는 SIGPIPE를 얻고 Java 응용 프로그램은 종료됩니다.안드로이드에서 유닉스 신호 처리하기

C/C++에서 신호를 잡아 무시하는 방법을 알고 있습니다. Android/Java에서 이와 유사한 작업을 수행 할 수 있습니까?

+1

어쩌면, 그것은의 규칙과 싸움을하지 좋은 game : java app가 C++에 묶여 있고 더 이상 연결이 없다면 java 앱을 뜯어서 다시 시작하십시오. 이 링크가 유용 할 수 있습니다 : http://stackoverflow.com/questions/2541597/how-to-gracefully-handle-the-sigkill-signal-in-java - 종료 후크를 설정하는 방법. –

+0

** ** 가능 ** 예를 들어 http://stackoverflow.com/questions/1083154/how-can-i-catch-sigsegv-segmentation-fault-and-get-a-stack-trace-under-jni를 참조하십시오. -ON –

+0

@ChrisStratton이 재미있는 것 같습니다. 감사! – elcuco

답변

1

정말 불가능한 것 같습니다. 여기에 설명 된대로 사용할 수있는 가장 좋은 방법은, "우아하게"응용 프로그램을 다시 시작 다운 종료 후크를 추가하는 것입니다 :

편집 :

내가 JNI 코드를했다 (당시) 때문에이 필요로하는에 저는 FD와 r/w를 열었습니다. FD는 명명 된 소켓 (유닉스 파이프)으로 열렸고, 파이프의 원격 측 (내 경우에는 데몬 또는 Android C/서비스)이 연결을 닫으면 (또는 죽을 때) 측에서 신호를받습니다. 이것은 항상 좋은 것은 아닙니다. 이걸 처리하는 것이 가장 좋은 방법은 좋은 old-plain-C 코드의 신호 처리기를 사용해야하며 그냥 삼킨다. 그렇지 않으면 앱의 Java 측에 알려야한다.

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

이 답변은 Android에 반드시 적용 할 수없는 jvm 기반 설명을 인용합니다. Android는 코드 컴파일 및 변환 된 Java 형식을 사용하지만 Java 가상 머신을 실제로 실행하지는 않지만 자체 Dalvik (또는 최근에는 Android Runtime) 시스템으로 다소 다른 동작을합니다. 또한 적어도 NDK를 사용하면 자신의 DVM 프로세스에서 신호 처리기를 대체 할 수 있습니다. –

+0

나는 링크가 완벽하게 적용 가능하지 않고 작동 할 수있는 방법이있는 것 같아서 작동하지 않을 것이라고 말하지 않았습니다. –