分析Linux内核创建一个新进程的过程
2015-04-11 20:48
316 查看
调用fork函数创建一个进程
在test.c文件中添加函数块如下:
并添加头文件#include <unistd.h>
将工作空间不必要的文件清理后,执行“make”命令
编译成功之后,执行“./test”命令
然后输入“Fork”命令,得如下结果,
输出信息表示的是父子进程的创建信息。
在gdb中跟踪调试情况如下:
首先执行命令:
“qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S”启动调试窗口。
然后重新打开一个终端,分别顺序执行如下三条指令:
在do_fork,copy_process,copy_thread三处设置断点,其执行顺序如下:
可以看出fork函数在这三个地方均以系统调用的方式访问内核。也可见其访问内核的顺序。
当然fork函数访问的系统调用远不止这三处,试验还在sys_clone和dup_task_struct处设置过断点,也追踪到了系统运行的流程。总体上说,这是一个复杂的过程。单凭单步调试和设置断点的方式,很难将其一一追踪到。此处也是管中窥豹,大体上了解fork系统调用的方式。
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
在test.c文件中添加函数块如下:
int Fork() { pid_t pid; pid=fork(); if(pid<0) { fprintf(stderr,"Fork Failed"); return -1; } else if(pid==0) { printf("This is Child Process,pid=%d\n",pid); return pid; } else { printf("This is parent process,pid=%d\n",pid); wait(NULL); printf("Child complete!\n"); return pid; } }
并添加头文件#include <unistd.h>
将工作空间不必要的文件清理后,执行“make”命令
编译成功之后,执行“./test”命令
然后输入“Fork”命令,得如下结果,
输出信息表示的是父子进程的创建信息。
在gdb中跟踪调试情况如下:
首先执行命令:
“qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S”启动调试窗口。
然后重新打开一个终端,分别顺序执行如下三条指令:
在do_fork,copy_process,copy_thread三处设置断点,其执行顺序如下:
可以看出fork函数在这三个地方均以系统调用的方式访问内核。也可见其访问内核的顺序。
当然fork函数访问的系统调用远不止这三处,试验还在sys_clone和dup_task_struct处设置过断点,也追踪到了系统运行的流程。总体上说,这是一个复杂的过程。单凭单步调试和设置断点的方式,很难将其一一追踪到。此处也是管中窥豹,大体上了解fork系统调用的方式。
《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
相关文章推荐
- 分析Linux内核创建一个新进程的过程
- Linux内核分析第六周学习笔记——分析Linux内核创建一个新进程的过程
- [转载] 分析Linux内核创建一个新进程的过程
- Linux内核创建一个进程的过程分析
- Linux内核作业--分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 实验 六:分析linux内核创建一个新进程的过程
- 《Linux操作系统分析》之分析Linux内核创建一个新进程的过程
- 实验六:分析Linux内核创建一个新进程的过程
- 第六周——分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程
- 分析Linux内核创建一个新进程的过程(Linux)
- 作业六:分析Linux内核创建一个新进程的过程
- linux内核分析 第六周 分析Linux内核创建一个新进程的过程
- Linux内核分析6:分析Linux内核创建一个新进程的过程
- 实验六:分析Linux内核创建一个新进程的过程
- 《Linux内核--分析Linux内核创建一个新进程的过程 》 20135311傅冬菁
- 20135202闫佳歆--week6 分析Linux内核创建一个新进程的过程——实验及总结
- Linux内核分析:分析Linux内核创建一个新进程的过程