摘要:
Fork的系统调用代码在linux/arch/i386/kernel/process.c中:asmlinkage int sys_fork(struct pt_regs regs){return do_fork(SIGCHLD, regs.esp, ®s, 0, NULL, NULL);}Sys_fork系统调用通过 do_fork()函数实现,通过对do_fork()函数传递不同的clone_flags来实现fork,clone,vfork。Syn_clone和syn_vfork的系统调用代码如下:asmlinkage int sys_clone(struct pt_regs regs 阅读全文
摘要:
linux通过clone()函数实现fork,这个调用通过一些列的参数标志来指明父子进程需要的共享资源。fork,vfork和_clone库函数都根据个字需要的参数标志去调用clone。然后由clone调用do_fork(). do_fork完成了创建中的大部分工作,它的定义在kernel/fork.c中。该函数调用copy_process函数,然后让进程开始运行。 copy_process完成的工作: @调用dup_task_struct()为新进程创建一个内核栈、thread_info结构和task_struct,这些值与当前进程的值相同。此时,子进程与父进程的描述符是玩去昂相同的。 阅读全文