linux下进程的创建代码,伪代码说明Linux进程创建过程
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进程创建过程相关推荐
- mtd分区创建linux,浅析linux下mtd设备onenand存储器的分区和节点创建流程及yaffs2文件系统挂载...
浅析linux下mtd设备onenand存储器的分区和节点创建流程及yaffs2文件系统挂载 在arch/arm/mach-pxa/luther.c这个产品平台文件中,即: MACHINE_START ...
- linux下tomcat启动后出现多个java进程
偶尔发现linux下tomcat启动后出现多个java进程,如下: 000 S 0 4789 1 0 85 0 - 75083 schedu pts/1 00:0 ...
- linux 防止启动多个进程,linux下tomcat启动后出现多个java进程解决办法
当前位置:我的异常网» Linux/Unix » linux下tomcat启动后出现多个java进程解决办法 linux下tomcat启动后出现多个java进程解决办法 www.myexception ...
- linux格式化大于2t硬盘分区,linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区...
linux下大于2tb硬盘格式化及挂载,linux下大于2t的分区方法,linux gpt分区表 管理 自动挂载分区 (7页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找 ...
- linux下新增ftp账号,【转】Linux下添加FTP账号和服务器、增加密码和用户,更改FTP目录...
转自:http://blog.csdn.net/cloudday/article/details/8640234 1. 启动VSFTP服务器 A:cenos下运行:yum install vsft ...
- 在linux下vcd光盘提取,linux下抓取Vcd的视频文件[Linux安全]
赞助商链接 本文"linux下抓取Vcd的视频文件[Linux安全]"是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判 ...
- linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案
linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 参考文章: (1)linux 下mysql忘记密码或者安装好linux后不知道mysql初始密码解决方案 (2) ...
- linux中替换文件中的内容,linux下批量替换文件中的内容linux操作系统 -电脑资料...
对于单个文件,使用sed命令很容易做到, grep命令可以查找单个文件或文件夹下文件中的内容,使用参数"r"或"-R"可以递归查找指定文件夹下的所有文件:参数& ...
- 介绍linux下Source Insight强大代码编辑器sublime_text_3
Centos6.4下安装Sublime Text 3 背景 1 一. 运行环境 1 二.安装环境配置 1 三.创建快捷方式 1 四.配置全局环境 2 五.操作界面 3 背景 在windows操作系统系 ...
最新文章
- nagios监控告警之网络流量监控(附pnp模板)
- delphi里用java_如何在整个Delphi应用程序中使用ID
- JavaWeb课程复习资料(八)——添加功能
- 修改WordPress中上传附件2M大小限制的方法
- Spring简化Java开发_spring如何简化java开发
- Java读取word中表格
- 浅谈深度学习中的激活函数
- 20145302张薇 《信息安全系统设计基础》第0周学习总结
- Mujoco入门教程1-xml文件学习
- finclip小程序运行机制与微信小程序运行机制
- 磁珠和电感有什么区别_电感和磁珠的作用
- html5怎么写副标题,毕业论文副标题怎么写
- vue2.0中的路由传值
- html5拖拽实现拼图,HTML5技术之图像处理:一个滑动的拼图游戏
- 页面操作时显示“处理中,请稍候。。。”
- CTFSHOW: 36D杯 misc ez-qrcode
- 如何快速识别两张照片的相似程度(用百分比)
- html怎么调整成苹方,web css 苹方字体设置
- Linux中的timedatectl时间设置及ntp时间同步服务搭建
- 织梦 plus/download.php,织梦/plus/download.php url重定向漏洞的解决方法
热门文章
- 2021年中国电动气动控制器市场趋势报告、技术动态创新及2027年市场预测
- 特斯拉、华为等竞争升级,国产芯片实现突破,自动驾驶过去这一年
- 苹果:App Store中国区无版号游戏8月1日起下架;美国计划打造量子互联网;HHVM 4.67 发布 | 极客头条...
- 小米回应林斌退休传闻;哈工大等高校被禁止使用 MATLAB;统信软件 UOS20 SP1 系统升级| 极客头条...
- 读取模式错误、计算引擎操作复杂:这些Hadoop问题该如何应对?
- 《原力计划【第二季】》第 4 周周榜揭晓!!!
- Python 数据分析实战,揭秘国内顶尖医院分布现状!
- 高通:2 亿像素手机 2020 年诞生!
- 2019年最值得关注的几个公众号,好评率高达99.99%
- GitHub 官方终于出 App 了!iPhone 用户可抢先体验