本文主要是介绍ret_from_fork,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Linux系统fork执行过程
2015年04月08日 18:18:48
阅读数:2207
郑德伦 原创作品转载请注明出处 《Linux内核分析》MOOC课程
http://mooc.study.163.com/course/USTC-1000029000
一、配置环境:
首先我们把环境配置完成
在实验楼中输入
rm menu –rf
git clone https://github.com/mengning/menu.git
cd menu
mv test_fork.c test.c
make rootfs
- 1
- 2
- 3
- 4
- 5
启动MenuOS后发现fork已经被加入到了MenuOS中了
二、跟踪调试fork
输入qemu –kernel ../linux-3.18.6/arch/x86/boot/bzImage –initrd ../rootfs.img –s –S
然后在另一个终端输入
gdb
(gdb)file linux-3.18.6/vmlinux
(gdb)target remote:1234
(gdb)b sys_clone
(gdb)b do_fork
(gdb)b dup_task_struct
(gdb)b copy_process
(gdb)b copy_thread
(gdb)b ret_from_fork
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
设置好断点之后 我们进行跟踪fork的过程
首先会触发sys_clone的系统调用
然后进入do_fork函数
在do_fork函数中会调用copy_process
在copy_process中调用dup_task_struct和copy_thread
最后调用ret_from_fork()完成进程的fork
整个过程我们用流程图表示一下:
三、总结
Linux创建一个新进程时,可能会使用到sys_vfork sys_clone sys_fork系统调用,但是这三个系统调用都会调用do_fork函数,do_fork会调用copy_process来复制父进程的资源给子进程。在copy_process中有各种copy_xxx 函数来进行复制初始化工作。完成各项工作之后会执行ret_from_fork,这是子进程的起点。
这篇关于ret_from_fork的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!