我已经重载了
我无法弄清楚如何做到这一点。我检查了
尝试以下操作:
fork()
系统调用,并使用RTLD_NEXT创建了自己的fork()
版本。即dlsym(RTLD_NEXT, fork)
。这将触发我的fork版本。在此之后,我想复制实际fork()
系统调用的任务,即创建子进程并返回pid以及一些其他附加功能。我无法弄清楚如何做到这一点。我检查了
fork()
(fork.c)的内核源代码,但没有找到很多线索。尝试以下操作:
dlsym(RTLD_NEXT,fork);
int fork(void) {
int pid=_fork(); // Trying to call actual fork does not work
return pid;
}
我该怎么做呢?这里是fork的内核源代码链接:http://lxr.linux.no/linux+v2.6.32/kernel/fork.c#L10
编辑(从评论中提取):
我正在开发一个泄漏检测工具,当子进程删除父进程分配的内存时,该工具会检测到双重释放。为了解决这个问题,我将覆盖fork()
,每当有fork()
时,父进程的内存分配表将被复制到子进程中。
int my_fork(void) { /* do stuff */; return fork(); }
而在头文件中:extern int my_fork(void); #define fork my_fork
。 - Chris Lutz