Перегрузка fork ()

Я перегрузил системный вызов fork () и создал свою собственную версию fork () , используя RTLD_NEXT. То есть dlsym (RTLD_NEXT, 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

Edit (извлечено из комментариев) :

Я работаю над инструментом обнаружения утечек, и этот инструмент обнаруживает двойное освобождение, когда дочерний процесс удаляет память, выделенную родителем. Чтобы преодолеть это, я переопределю fork () , и всякий раз, когда будет fork () , таблица распределения памяти родителя будет дублирована для дочерней.

6
задан haneefmubarak 2 March 2015 в 00:03
поделиться