Я пытаюсь запустить процесс из другого в начале. Для этого я попытался изменить функцию __libc_start_main
в glibc (модифицированный glibc, который я использую), и попытался поместить туда вилку, но не смог скомпилировать glibc, поскольку он дает ошибку, когда я пытаюсь это сделать. Какие другие варианты и почему вставка fork в __libc_start_main
не работает?Как запустить два экземпляра процесса через fork без изменения программы
Снова обратите внимание, что я хочу сделать это так, чтобы не требовалась никакая модификация программы, то есть модификация в glibc в порядке, но не в программе.
В __libc_start_main
, я стараюсь развиваться следующим образом.
if (__builtin_expect (! not_first_call, 1))
{
struct pthread *self;
fork(); // <-- here
self = THREAD_SELF;
/* Store old info. */
unwind_buf.priv.data.prev = THREAD_GETMEM (self, cleanup_jmp_buf);
unwind_buf.priv.data.cleanup = THREAD_GETMEM (self, cleanup);
/* Store the new cleanup handler info. */
THREAD_SETMEM (self, cleanup_jmp_buf, &unwind_buf);
/* Run the program. */
result = main (argc, argv, __environ MAIN_AUXVEC_PARAM);
}
Ошибка, которую я получаю, следующая.
file '/build/sunrpc/xbootparam_prot.T' already exists and may be overwritten
make[2]: *** [build/sunrpc/xbootparam_prot.stmp] Error 1
какая ошибка вы получаете при компиляции вашего измененного libc? – philant
Почему бы вам просто не создать программу-оболочку, переименовать ее в нечто другое, а в программе-оболочке-оболочке и exec, а просто выполнить переименованный процесс? –
Если у вас нет статических данных, вы можете 'fork()' first thing в 'main()'. Вам придется подумать о дескрипторах файлов и обработчиках сигналов, и все это конечно. –