我已经使用RTLD_NEXT重载了fork()
系统调用并创建了我自己的版本fork()
。那就是,dlsym(RTLD_NEXT, fork)
。这将击中我的版本的叉子。在此之后,我想复制实际的fork()
系统调用的任务,即创建子进程并返回pid,以及一些更多的附加功能。Overloading fork()
我无法弄清楚如何做到这一点。我检查了内核源代码fork()
(fork.c),并且不知道多少。
这样做:
dlsym(RTLD_NEXT,fork);
int fork(void) {
int pid=_fork(); // Trying to call actual fork does not work
return pid;
}
我怎么能这样做?下面是内核源代码叉链接:http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10
编辑(从评论被拉):
我对泄漏工作的检测工具,该工具检测到双免费的,当一个子进程删除由父级分配的内存。为了克服这个问题,我将覆盖fork()
,并且每当有一个fork()
时,父级的内存分配表将被复制到子级。
你是什么意思的“不工作”?运行时错误?编译器错误? – Simone 2011-02-02 08:47:31
@Simone:_fork(); //错误:_fork没有声明。我的想法是让它碰到fork的实际内核版本,而不是我的。希望现在明确。 – kingsmasher1 2011-02-02 08:50:54
你到底想做什么?你最终的目标是什么? – Omnifarious 2011-02-02 08:51:18