http://blog.csdn.net/hongmy525/archive/2007/11/11/1879026.aspx

以前单知道linux创建进程用的fork函数,深一点点知道是调用sys_fork系统调用来完成,前阵子看了 安全焦点process写得文章对这个过程的框架有了点点认识,记下来,以后再学到时把它更深入一成的研究。:)

Fork --> sys_fork() --> do_fork();这里倒是有点想exec族的系统调用,execve() -> sys_exec() -> do_exec().

下面我们开始吧。

sys_fork()

{

Sys_fork系统调用通过do_fork()函数实现,

do_fork()

{

通过对do_fork()函数传递不同的clone_flags来实现fork,clone,vfork

copy_process()

{

copy_process()函数完成了进程创建的绝大部分工作

dup_task_struct()

{

dup_task_struct()为进程创建一个新的内核堆栈,

完整复制task_struct和

thread_info结构这里只是完整的复制,进程描述符process

descriptor (struct task_struct)进程描述符与父进程的一样

(task_struct与父进程的一样)

创建内核堆栈和和task_struct结构空间

tsk = alloc_task_struct();

复制整个进程描述符(复制整个task_struct结构)

*tsk = *orig;

复制thread_info结构

setup_thread_struct(tsk, org);

}//end dup_task_struct()

rlim[rLIMIT_NPROC]限制用户可以拥有的进程数

capble()对权限进行检查

更新task_struct结构的flags成员

...

对子进程的task_struct进行初始化

...

获得新的pid

...

复制其他资源

if ((retval = security_task_alloc(p)))

goto bad_fork_cleanup_policy;

if ((retval = audit_alloc(p)))

goto bad_fork_cleanup_security;

/* copy all the process information */

if ((retval = copy_semundo(clone_flags, p)))

goto bad_fork_cleanup_audit;

if ((retval = copy_files(clone_flags, p)))

goto bad_fork_cleanup_semundo;

//pr0cess大侠把copy_files()举例出来了

copy_files()

{

...

newf = dup_fd(oldf, &error){

newf = alloc_files(){

//调用kmem_cache_alloc()来为子进程分配file_struct

...

接着设置file_struct结构的count成员

alloc_files()中把oldf的内容copy到newf中

}//end alloc_files

}//end dup_fd()

}//end copy_files()

if ((retval = copy_fs(clone_flags, p)))

goto bad_fork_cleanup_files;

if ((retval = copy_sighand(clone_flags, p)))

goto bad_fork_cleanup_fs;

if ((retval = copy_signal(clone_flags, p)))

goto bad_fork_cleanup_sighand;

if ((retval = copy_mm(clone_flags, p)))

goto bad_fork_cleanup_signal;

if ((retval = copy_keys(clone_flags, p)))

goto bad_fork_cleanup_mm;

if ((retval = copy_namespaces(clone_flags, p)))

goto bad_fork_cleanup_keys;

retval = copy_thread(0, clone_flags, stack_start, stack_size, p, regs);

if (retval)

goto bad_fork_cleanup_namespaces;

copy_thread(){

...

复制父进程系统空间堆栈,堆栈中有完整的路线指明父进程通过

//系统调用进入内核空间的过程

//子进程推出时需要按照完整的路线返回

}//end copy_thread()

//now return copy_process()

设置子进程退出时要像父进程发送信号

将子进程联入进程队列等待被唤醒

}//end copy_process()

唤醒子进程并开始运行,所以为什么说fork是调用一次返回两次

一次是父进程,一次是子进程

}//end do_fork()

}//end sys_fork()

这是我的读书笔记,主要是读安全焦点的这篇文章:

linux下进程的创建代码,伪代码说明Linux进程创建过程相关推荐

  1. mtd分区创建linux,浅析linux下mtd设备onenand存储器的分区和节点创建流程及yaffs2文件系统挂载...

    浅析linux下mtd设备onenand存储器的分区和节点创建流程及yaffs2文件系统挂载 在arch/arm/mach-pxa/luther.c这个产品平台文件中,即: MACHINE_START ...

  2. linux下tomcat启动后出现多个java进程

    偶尔发现linux下tomcat启动后出现多个java进程,如下: 000 S     0  4789     1  0  85   0    - 75083 schedu pts/1    00:0 ...

  3. linux 防止启动多个进程,linux下tomcat启动后出现多个java进程解决办法

    当前位置:我的异常网» Linux/Unix » linux下tomcat启动后出现多个java进程解决办法 linux下tomcat启动后出现多个java进程解决办法 www.myexception ...

  4. linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...

    linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...

  5. linux下新增ftp账号,【转】Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录...

    转自:http://blog.csdn.net/cloudday/article/details/8640234 1. 启动VSFTP服务器 A:cenos下运行:yum  install  vsft ...

  6. 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]

    赞助商链接 本文"linux下抓取Vcd的视频文件[Linux安全]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...

  7. linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案

    linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 参考文章: (1)linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 (2) ...

  8. linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...

    对于单个文件,使用sed命令很容易做到, grep命令可以查找单个文件或文件夹下文件中的内容,使用参数"r"或"-R"可以递归查找指定文件夹下的所有文件:参数& ...

  9. 介绍linux下Source Insight强大代码编辑器sublime_text_3

    Centos6.4下安装Sublime Text 3 背景 1 一. 运行环境 1 二.安装环境配置 1 三.创建快捷方式 1 四.配置全局环境 2 五.操作界面 3 背景 在windows操作系统系 ...

最新文章

  1. nagios监控告警之网络流量监控(附pnp模板)
  2. delphi里用java_如何在整个Delphi应用程序中使用ID
  3. JavaWeb课程复习资料(八)——添加功能
  4. 修改WordPress中上传附件2M大小限制的方法
  5. Spring简化Java开发_spring如何简化java开发
  6. Java读取word中表格
  7. 浅谈深度学习中的激活函数
  8. 20145302张薇 《信息安全系统设计基础》第0周学习总结
  9. Mujoco入门教程1-xml文件学习
  10. finclip小程序运行机制与微信小程序运行机制
  11. 磁珠和电感有什么区别_电感和磁珠的作用
  12. html5怎么写副标题,毕业论文副标题怎么写
  13. vue2.0中的路由传值
  14. html5拖拽实现拼图,HTML5技术之图像处理:一个滑动的拼图游戏
  15. 页面操作时显示“处理中,请稍候。。。”
  16. CTFSHOW: 36D杯 misc ez-qrcode
  17. 如何快速识别两张照片的相似程度(用百分比)
  18. html怎么调整成苹方,web css 苹方字体设置
  19. Linux中的timedatectl时间设置及ntp时间同步服务搭建
  20. 织梦 plus/download.php,织梦/plus/download.php url重定向漏洞的解决方法

热门文章

  1. 2021年中国电动气动控制器市场趋势报告、技术动态创新及2027年市场预测
  2. 特斯拉、华为等竞争升级,国产芯片实现突破,自动驾驶过去这一年
  3. 苹果:App Store中国区无版号游戏8月1日起下架;美国计划打造量子互联网;HHVM 4.67 发布 | 极客头条...
  4. 小米回应林斌退休传闻;哈工大等高校被禁止使用 MATLAB;统信软件 UOS20 SP1 系统升级| 极客头条...
  5. 读取模式错误、计算引擎操作复杂:这些Hadoop问题该如何应对?
  6. 《原力计划【第二季】》第 4 周周榜揭晓!!!
  7. Python 数据分析实战,揭秘国内顶尖医院分布现状!
  8. 高通:2 亿像素手机 2020 年诞生!
  9. 2019年最值得关注的几个公众号,好评率高达99.99%
  10. GitHub 官方终于出 App 了!iPhone 用户可抢先体验