我已經使用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