do_fork()函数负责处理clone(),fork,vfork()系统调用。
long do_fork(unsigned long clone_flags,
unsigned long stack_start,
struct pt_regs *regs, 指向通用寄存器值得指针,通用寄存器的只是在从用户态切换到内核态时被保存到内核态堆栈中的。
unsigned long stack_size, 未使用0。
int __user *parent_tidptr, 与clone()中的ptid相同
int __user *child_tidptr) 与clone()中的ctid相同
do_fork()利用辅助函数copy_process()来创建进程描述符以及子进程执行所需要的其他内核数据结构。
copy_process()函数
copy_process()创建进程描述符以及子进程执行所需的所有其他数据结构。他的参数和do_fork()相同;
static task_t *copy_process(unsigned long clone_flags,
unsigned long stack_start,
struct pt_regs *regs,
unsigned long stack_size,
int __user *parent_tidptr,
int __user *child_tidptr,
int pid)