像脚本一样调用可执行文件

Calling an executable like a script

我正在使用 C 开发 HTTP/1.1 服务器作为一种学习体验,并希望在保持动态的同时提高性能。在静态文件或脚本上执行 get 或 post 很容易,但我想添加调用已编译二进制文件的功能以提高速度。

目前,我 link 这些编译后的二进制文件直接进入服务器二进制文件,但我希望能够更新和热交换它们。我考虑过动态 link 将它们作为共享库,但我不想重新 link 它们来处理每个请求。我还考虑过为 运行 它们创建一个新进程,但是这会导致每个请求的开销很大,并且很难将响应返回给客户端(我使用的是 OpenSSL 套接字)。

我如何在不关闭服务器的情况下有效地重新link这些已编译的二进制文件?

我正在使用 CentOS 7 在 Debian Sid 和 运行ning 上测试 AWS ECS 实例。两者都有 Linux 内核版本 4.19+

I'd like to be able to update and hot swap them. I considered dynamically linking them as shared libraries

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

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

这可以在有限的情况下工作如果你使用dlopen加载库,如果你可以停止你的服务器,并让它dlclose 卸载之前加载的版本,然后 dlopen 更新版本。但是使这项工作的确切细节非常棘手。