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