免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-03-15 06:18 |只看该作者 |倒序浏览
copy_process函数的处理过程:

1  检查clone_flag参数
     1)CLONE_NEWNS与CLONE_FS不能同时置位。因为另用新空间与用同一个作业目录是矛盾的。
     2)如果把CLONE_THREAD置位,则也须把CLONE_SIGHAND置位。因为同一个线程组里的必共享信号。
     3)如果把CLONE_SIGHAND置位,则也须把CLONE_VM置位。因为共享信号就必须共享mm_struct。

2  分配新的内存空间给子进程的task_struct与thread_info

3  对进程user的检查

4  group_info的更新

5  检查系统全部进程数
      若超过系统允许的进程数,则返回错误。

6  模块的更新

7  把被分配的PID写进用户空间

8  初始化信号成不接受状态

9  时钟相关初始化

10 根据clone_flags进行下面的复制操作
    1 copy_semundo
    2 copy_files
    3 copy_fs
    4 copy_sighand
    5 copy_mm
    6 copy_namespace
    7 copy_thread
        1)找到子进程的寄存器值的地址,把父进程的寄存器值写入其中。
        2)把子进程的EAX置0,这就是fork/vfork/clone函数的子进程的返回值。
          (父进程为的返回值为子进程的PID)
        3)把子进程的ESP置为指定的值。
        4)将进程的栈指针指向属于子进程的栈空间。
        5)设置子进程被调度时的执行开始位置。

11 设置通知父进程的信号。

12 将子进程状态置位TASK_RUNNING,并将其加入执行对列。

13 处理新生成的进程和已存在的其他进程的关系。

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP