调用脚本等可执行文件

时间:2019-01-23 22:28:54

标签: linux dynamic-linking

我正在C中使用HTTP / 1.1服务器进行学习,希望在保持动态的同时使其具有高性能。在静态文件或脚本上执行获取或发布很容易,但是我想增加调用编译二进制文件的功能,以提高速度。

当前,我将这些已编译的二进制文件直接链接到服务器二进制文件中,但是我希望能够对其进行更新和热交换。我考虑过将它们动态链接为共享库,但是我不想重新链接它们以处理每个请求。我还考虑过创建一个新的进程来运行它们,但是,这会给每个请求带来巨大的开销,并使返回到客户端的响应变得困难(我正在使用OpenSSL套接字)。

这些已编译的二进制文件在更新时如何有效地重新链接而又不关闭服务器?

我正在Debian Sid上进行测试,并在具有CentOS 7的AWS ECS实例上运行。两者都具有Linux内核版本4.19 +

1 个答案:

答案 0 :(得分:0)

  

我希望能够更新和热交换它们。我考虑过将它们动态链接为共享库

您似乎认为可以更新当前正在使用的服务器二进制文件的共享库(在磁盘上),并且希望该正在运行的服务器进程开始使用更新后的库。

不是共享库如何工作。如果尝试这样做,服务器进程将崩溃,或者继续使用旧库(具体取决于您如何更新磁盘上的库)。

如果您使用dlopen加载库,并且是否可以静默服务器并使其dlclose卸载,则可以在有限的情况下使用 先前加载的版本,然后dlopen更新的版本。但是进行这项工作的确切细节非常棘手。