1

我正在使用 tesseract 项目将图像转换为字符串。但是,SIGSEGV 信号是从他的 JNI 发送的(随机?)。

我想在发送信号时重新启动我的应用程序,但我没有找到任何解决方案来使用 Java“捕获”信号。

有人有建议吗?

谢谢

4

2 回答 2

1

虽然您可以使用本机信号处理程序捕获 SIGSEGV,但您可能会发现在处理程序内执行与 android api 交互有关的任何有用的事情并不容易。

最好的办法可能是了解并解决问题。

就解决方法而言 - 这确实是一个非常劣质的解决方案 - 您大概可以使用 AlarmManager 在未来几秒钟设置一个事件,如果您在“有风险的“ 手术。或者您可以启动一项服务(不在同一进程中运行),如果服务连接丢失,该服务将重新启动您的应用程序。

于 2011-05-24T15:33:22.427 回答
0

因为没有人帮忙。我想指出这样一个事实,质疑意图或目标是不尊重的。我们需要事实,而不是意见或猜测。这似乎是这里的一种习惯。就我而言,我想捕获 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, "%s\n", error);
>         exit(1);
>     }
>     printf ("%f\n", (*setDataSource)("/data/data/com.example.ap/files/cve_2015_2396.mp4"));
>     dlclose(handle);
>     return 0;
于 2015-08-12T18:33:08.630 回答