【问题标题】:Avoiding the Server getiing crashed because of ".so" failure避免服务器因“.so”故障而崩溃
【发布时间】:2013-12-20 00:37:42
【问题描述】:

我正在使用 c++ 开源代码,它被制作为“.so”并放置在服务器中。从 Java 客户端,我将通过 JNI 包调用这个“.so”。

现在我的问题是,我正在使用的“开源 C++”代码没有处理任何错误。因此,如果 C++ 部分发生某些事情,服务器就会崩溃。所以在我重新启动服务器之前,我无法使用我的应用程序。

我的问题是,有什么方法可以阻止由于“.so”(C++ 代码)失败而导致的服务器崩溃?现在我也无法修改开源 C++ 代码,因为我的时间很紧。

有人可以提供一些想法或解决方法来阻止服务器因“.so”故障而崩溃吗?

【问题讨论】:

  • 停止使用开源垃圾,或者修复它。

标签: c++ java-native-interface shared-libraries


【解决方案1】:

我假设你得到了 SIGSEG 或类似的东西。

您可以尝试捕捉信号并进行一些特殊处理。我不推荐这样做,因为很难让代码干净地退出(内存泄漏等)。

更好的方法是启动一个新进程并在那里运行“.so”。这样,无论代码变得多么糟糕,它都是一个单独的过程。如果它崩溃了,你的主服务器会很好,只需要处理一个损坏的管道(关闭的文件/通信通道)。

【讨论】:

  • 感谢您的回复。我从 Java 客户端调用“.so”。如果我能在 Java 中找到一个例子,那就太好了。
  • @Sorin 我过去曾这样做过,让辅助进程通过 RMI 公开本机库。效果很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-02
  • 2011-12-24
  • 2018-09-14
  • 1970-01-01
  • 2010-11-12
  • 1970-01-01
  • 2014-04-12
相关资源
最近更新 更多