免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 746 | 回复: 0
打印 上一主题 下一主题

Linux进程管理(7) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-06 09:03 |只看该作者 |倒序浏览
    如果说fork赋予了一个新生进程以肉体存在的话,那么execve便赋予了该进程以精神意识。刚刚出生的进程婴儿几乎完全传承了其父进程的一切,包括精神意识,直到execve的到来。execve会把进程婴儿天生便被赋予的运行轨迹彻底破弃,然后赋予其一个新的属于自己的人生。这一切在内核中是通过do_execve来完成,而do_execve中的一个很重要的环节便是elf_load_binary。
   
    elf_load_binary的处理流程简述如下:
    1 检查文件头,确认是否是ELF文件
    2 读入程序的头
    3 放弃文件描述符的共享(unshare_files)
    4 在指定了解释器的情况下,打开对象文件,检查头
    5 为载入新程序作准备(flush_old_exec)
    6 将执行文件相关在栈中展开(setup_arg_pages)
    7 根据程序头,elf_map函数将程序加载
    8 解释器被指定的情况下的加载(load_elf_interp)
    9 新程序执行时的寄存器值的初始化
   
    上述中的flush_old_exec的处理过程简述如下:
    1 线程组的处理(de_thread)
    2 申请的新的mm_struct并切换到新空间(exec_map)
    3 硬件平台相关的执行状态初始化(flush_thread)
    4 将信号句柄返回到的初始化状态(flush_signal_handlers)
    5 被指定了close-on-exec的文件在exec时关闭(flush_old_files)

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/91477/showart_1890876.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP