ret_from_fork

2024-05-13 07:08
文章标签 fork ret

本文主要是介绍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的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/985013

相关文章

Linux进程初识:OS基础、fork函数创建进程、进程排队和进程状态讲解

目录 1、冯诺伊曼体系结构 问题一:为什么在体系结构中存在存储器(内存)? 存储单元总结: 问题二:为什么程序在运行的时候,必须把程序先加载到内存? 问题三:请解释,从你登录上qq开始和某位朋友聊天开始,数据的流动过程。 2、操作系统 2.1操作系统的概念: 我们首先要明白什么是管理: 2.2为什么要有操作系统? 2.3操作系统如何保证稳定和安全呢?(利用系统调用函数解决)

Linux的进程,线程以及调度(fork与僵尸,内存泄漏,task结构体,停止状态与作业控制)

1.Linux进程生命周期(就绪、运行、睡眠、停止、僵死) 2.僵尸是个什么鬼? 3.停止状态与作业控制,cpulimit 4.内存泄漏的真实含义 5.task_struct以及task_

pymysql.err.OperationalError: (5000, ‘sql decompose ret[-1] error‘)问题

分布式数据库 sql语句写对没?! 注意是以什么字段分表的,where后面必须要有

fork进程

任务队列是一个双向循环链表 产生进程机制:fork() + exec() //exec:负责读取可执行文件并将其载入地址空间中运行 fork()使用 写时拷贝实现, 只有在需要写入时,数据才会被复制,从而使各个进程拥有各自的拷贝 fork()之后, 子进程先执行(内核有意选择子进程先执行),因为一般子进程都会马上调用exec()函数,这样可以避免写时拷贝的

fork入门

1哪个分支会打印 如下是fork的典型问题。fork之后有3个分支,分别是pid等于0,pid大于0,pid小于0。如果我们不了解fork的话,那么肯定会认为这里的if else分支只会有一个分支被执行。而实际的执行结果是两个分支都执行了。fork返回之后就创建了一个子进程,父进程在fork返回之后继续向下执行;子进程同样也是从fork返回之后开始执行。对于父进程来说,返回值是子进程的进程号,对

rv1126--Create RKNN model fail, error=-13,rknn_init error ret=-13

在rv1126板子上加载rknn模型时报错,   ./run_rv1109_rv1126.shpost process config: box_conf_threshold = 0.50, nms_threshold = 0.60Loading mode...Create RKNN model fail, error=-13rknn_init error ret=-13 这时候当然是去

程序员面试之nginx和apache的区别,nginx在开启时,会生成一个master进程,然后,master进程会fork多个worker子进程,最后每个用户的请求由worker的子线程处理。

Apache和Nginx最核心的区别在于 apache 是同步多进程模型,一个连接对应一个进程;而 nginx 是异步的,多个连接(万级别)可以对应一个进程。下面本篇文章就来给大家介绍一下Apache和Nginx的区别有那些,选择哪个好?希望对你们有所帮助。 AI:please wait...Nginx和Apache都是常用的Web服务器软件,它们在以下几个方面有一些区别:1. 架构和性能:N

java Fork/Join 框架的理解以及简单运用

Fork/Join 是一种并行计算模式,主要用于将任务分解为更小的子任务(Fork),递归地解决这些子任务,然后将结果合并(Join)以获得最终结果。这种模式非常适合于可以并行处理的任务,特别是那些可以分解为多个独立子问题的任务。 ### Fork/Join 框架的关键概念: 1. **任务(Task)**:表示可以执行的工作单元。在 Java 中,可以通过实现 `Callable` 接口来创

linux bash shell之递归函数:fork炸弹

所谓fork炸弹是一种恶意程序,它的内部是一个不断在fork进程的无限循环,fork炸弹并不需要有特别的权限即可对系统造成破坏。fork炸弹实质是一个简单的递归程序。由于程序是递归的,如果没有任何限制,这会导致这个简单的程序迅速耗尽系统里面的所有资源。下面是Jaromil设计的最简单的fork炸弹: :() { :|:& };: 或者是 .() { .|.& };. 这么一行只有13个字符

多个fork线程与主线程或其他的pthread线程通信的例子

最近在做一个项目,需要建立两个server,一个循环检测收到的数据发送到另一个server,但是由于fork新建的线程里面的全局变量都是副本,同时fork里面还有个阻塞的循环用于处理event,所以也不能用select的方式,同时用pthread出现了前后全局变量相互覆盖的情况,所以采取多线程相互fifo通信的方式解决问题: