LINUX.ORG.RU

fork() помогите пожалуйста разобраться как работает. C++

 , ,


0

1

Добрый день! Мне нужно показать, почему после выполнения fork() порожденный процесс продолжает выполняться с места вызова fork(). В исходниках функции (fork) нашел строчку p = copy_process(clone_flags, stack_start, regs, stack_size, child_tidptr, NULL, trace); Вызов copy_process отвечает за порождение нового процесса, а параметр regs (структура типа pt_regs) отвечает за хранение регистров процесса, в том числе и счетчика команд (который отвечает за хранение адреса выполняемой команды). Теперь мне нужно найти, где описывается тип pt_regs в ядре и найти, где хранится счетчик команд. Я и гуглил, и в книжках глядел, никак не могу найти. Подскажите пожалуйста или где этот параметр лежит в исходниках ядра, или что почитать, чтобы это узнать. Всем заранее спасибо!

На x86 файл /usr/include/asm/ptrace.h, /usr/src/linux/arch/x86/include/uapi/asm/ptrace.h или /usr/src/linux/arch/x86/include/asm/ptrace.h (в последнем немного по-другому объявлена, первые 2 для userspace):

struct pt_regs {
        long ebx;
        long ecx;
        long edx;
        long esi;
        long edi;
        long ebp;
        long eax;
        int  xds;
        int  xes;
        int  xfs;
        int  xgs;
        long orig_eax;
        long eip;
        int  xcs;
        long eflags;
        long esp;
        int  xss;
};

eip — указатель на инструкцию.

gentoo_root ★★★★★
()

Большое спасибо! Можете сразу подсказать какой из параметров хранит счетчик команд?

Egyptorium
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.