Linux系统如何创建一个新进程进行

董涛 

原创作品转载请注明出处

《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

 

基于实验楼网站提供的《Linux内核分析》实验平台,通过gdb调试命令跟踪创建新进程,概括了解linux内核如何创建一个新的进程。

首先,完成新的操作系统menuOS的编译和运行,截图如下:

第二步,在sys_clone函数处设置断点,截图如下:

由截图可知,sys_clone函数的作用是Fork a new process,即创建一个新的进程;

第三步,在ret_from_fork处设置断点,并用(gdb)n命令跟踪调试程序,截图如下:

通过分析ret_from_fork函数的功能可知,新的进程是从ret_from_fork处开始执行的,在ret_from_fork函数中,首先,子进程通过copy process函数和dup_task_struc函数t复制父进程的状态,并通过alloc_thread_infonode将父进程的堆栈状态压入子进程的堆栈以备返回父进程时候使用,确保了内核进程的执行起点与内核堆栈保持一致,最后,跳转至sys_call exit函数,完成子进程的创建。

总结一下,进程创建是linux系统调用的一种形式,进程创建可以通过fork,vfork,clone三个系统调用实现,它们都是通过do_fork函数实现进程创建的,在do_fork函数中,以ret_from_fork函数为执行起点,复制父进程的内存堆栈和数据,并修改某些参数实现子进程的定义和初始化,创建子进程的工作完成后,通过sys_call exit函数退出并pop父进程的内存堆栈,实现新进程的创建工作。

你可能感兴趣的:(liunx)