背景
我正在用 C 编写一个共享库,与 动态链接LD_PRELOAD
,这意味着拦截和覆盖来自预加载它的应用程序的网络调用,例如socket()
, connect()
, recv()
,send()
等。
在库的初始化中,我使用pthread_create()
. 该线程轮询一些映射到用户空间的内核内存。
该库具有足够的通用性,可以处理(但不限于)网络基准应用程序,例如netperf、iperf、sockperf。
我的问题
一切正常,在大多数情况下,生活都是甜蜜的,除了一个。去魔化的应用程序。例如,如果我启动netserver(netperf基准测试应用程序的服务器端)作为守护程序,即没有-D
参数,应用程序首先要做的事情之一就是调用fork()
. 在 fork 上,父级使用关闭exit(EXIT_SUCCESS)
,子级监听连接。父母退出的事实杀死了我的轮询线程。
所以我想要实现的是让孩子在父母离开时产生一个新的轮询线程。我可以拦截和覆盖fork()
电话,但从根本上说,我怎样才能让孩子知道父母是否已经走了?我不能做任何假设,因为库必须是通用的。
谢谢。