我正在为C语言库编写一个容器服务器
系统库dl作为dynamic链接加载器,用于实现编程接口。 这是dlopen
/ dlsym
函数。
要将控制权返回给容器服务器,可以使用return
和exit
。 return
是好的。
但是用户程序中的exit()
会导致容器服务器也退出。
我如何支持在用户程序中退出?
我想在调用dynamic链接加载器时重写exit
函数。
既然你只是在编写一个库,如果没有一个进程调用它,它就不能自行运行。
只要应用程序退出,您的图书馆的状态也将不幸遗失。
换句话说,即使应用程序退出后,如果要保持状态,则可能需要编写一个初始化守护程序,该初始化守护程序始终是初始化此库并在后台继续运行的初始化进程,作为维护你的容器。
您还需要使用信号量或某种形式的IPC来确保状态在使用此库的守护程序和其他客户端进程之间传播。
也许你应该创建一个新的子进程来运行可能调用exit()
的库函数。 当库函数调用exit()
或返回时,子进程将退出,父进程(容器服务器)将获得有关终止子进程的信息。
在这种情况下,启动新的子进程的最简单方法是调用fork()
。 在这种情况下不需要使用system()
调用。