问题描述
|
我正在使用tesseract项目将图像转换为字符串。
但是,SIGSEGV信号是从JNI发送的(随机?)。
我想在信号发送后重新启动我的应用程序,但是我没有找到使用Java“捕获”信号的任何解决方案。
有人有建议吗?
谢谢
解决方法
虽然您可以使用本机信号处理程序来捕获SIGSEGV,但是从处理程序内部进行android api交互方面,做任何有用的事情可能都不容易。
最好的办法可能是了解并解决问题。
就解决方法而言-这确实是一个非常次等的解决方案-大概可以在将来使用AlarmManager设置事件几秒钟,然后取消该事件/将其进一步推送(如果后来发现仍在运行) “风险”操作。或者您可以启动一项服务(不在同一进程中运行),如果服务连接丢失,该服务将重新启动您的应用程序。
,由于没有人在帮助。我想指出一个事实,对目的或目标提出质疑是无礼的。我们想要的是事实,而不是观点或猜测。这似乎是一种习惯。就我而言,我想捕获SIGSERV,因为我想检测共享库中的漏洞。出于安全原因,如果没有受欢迎的误报,没有其他确定的方法可以检测到该漏洞。这是我几天前发现的东西:
> #include <stdio.h>
> #include <stdlib.h>
> #include <dlfcn.h>
>
>
> int main(int argc,char **argv) {
> void *handle;
> void* (*doSomething)(char);
> char *error;
> handle = dlopen (\"libexample.so\",RTLD_LAZY);
> if (!handle) {
> fprintf (stderr,\"%s\\n\",dlerror());
> exit(1);
> }
> dlerror(); /* Clear any existing error */
> foo = dlsym(handle,\"doSomething\");
> if ((error = dlerror()) != NULL) {
> fprintf (stderr,error);
> exit(1);
> }
> printf (\"%f\\n\",(*setDataSource)(\"/data/data/com.example.ap/files/cve_2015_2396.mp4\"));
> dlclose(handle);
> return 0;