如何避免;退出“;在C语言中为我的容器服务器的用户定义库程序中?

如何避免;退出“;在C语言中为我的容器服务器的用户定义库程序中?,c,linux,unix,overriding,exit,C,Linux,Unix,Overriding,Exit,我正在用C为库编写一个容器服务器 系统库dl作为动态链接加载程序,用于实现编程接口。这就是dlopen/dlsym功能 要将控制权返回到容器服务器,可以使用return和exit。返回值正常 但是用户程序中的exit()也会导致容器服务器退出 如何支持退出用户程序 我想在调用动态链接加载器时重写exit函数。因为您只编写了一个库,如果没有调用它的进程,它就无法独立运行 不幸的是,一旦应用程序退出,库的状态也将丢失 换句话说,如果您希望在应用程序退出后仍保持该状态,则可能需要编写一个初始化守护进程

我正在用C为库编写一个容器服务器

系统库dl作为动态链接加载程序,用于实现编程接口。这就是
dlopen
/
dlsym
功能

要将控制权返回到容器服务器,可以使用
return
exit
返回值
正常

但是用户程序中的
exit()
也会导致容器服务器退出

如何支持退出用户程序


我想在调用动态链接加载器时重写
exit
函数。

因为您只编写了一个库,如果没有调用它的进程,它就无法独立运行

不幸的是,一旦应用程序退出,库的状态也将丢失

换句话说,如果您希望在应用程序退出后仍保持该状态,则可能需要编写一个初始化守护进程,它始终是初始化该库的第一个进程,并在后台保持运行,以此作为维护容器状态的一种手段


您还需要使用信号量或某种形式的IPC来确保状态在守护进程和使用此库的其他客户端进程之间传播。

也许您应该创建一个新的子进程来运行库函数,该子进程可以调用
exit()
。 当库函数调用
exit()
或返回时,子进程将退出,父进程(容器服务器)将获得有关终止子进程的信息


在这种情况下,启动新子进程的最简单方法是调用
fork()
。在这种情况下,不需要使用
system()
调用

非常感谢。在原始设计中,子进程模块被拒绝。因为用户定义的应用程序在很大程度上取决于容器服务器的上下文。我将在主主题中添加限制。c原始设计中拒绝子进程模块。因为用户定义的应用程序在很大程度上取决于容器服务器的上下文。函数setjmp和longjmp将用于替换用户程序中的exit。感谢Danny Beckett、User1和Tuxdude。对不起,我正在编写一个容器服务器,这是一个标准的linux进程。应用程序来自用户。