调用方进程崩溃后卸载共享库

时间:2018-07-24 06:51:35

标签: linux shared-libraries dlopen

我想开发一个Linux程序和一个共享库,这些文件将在启动时由我的程序加载(调用dlopen,dlsym等)。如果我的程序终止,它将卸载共享库(dlclose)。但是,如果崩溃,则不会卸载共享库。有什么解决方案可以卸载它吗?

我不想浪费系统资源,我将在以后改进共享库并替换旧的库。下面是一个示例。

程序源(非常简化的草图)

#include <dlfcn.h>
typedef void ExternF(int n, char *F);
ExternF *Function;
void *Handle;
int main(int argc, int **Argv) {
Handle = dlopen("./Lib.so",RTLD_LAZY);
do {
   if (...TerminateRequest...) break;
   if (...ReloadRequest...) {
      dlclose(Handle);
      Handle = dlopen("./Lib.so",RTLD_NOW);
      Function = dlsym(Handle,"Execution");
      Function(5,"Five");
      }
   ...
   } while (1);
dlclose(Handle);
return 0;
}

图书馆资源

#include <stdio.h>
void Execution(int k, char *S) {
printf("%d %s\n",k,S);
/* crash may happen here */
}

0 个答案:

没有答案
相关问题