zoukankan      html  css  js  c++  java
  • fork()如何返回两次不同的值

    pid=fork()

    fork()内会用一段嵌入式汇编进行系统调用:int 0x80(具体代码可参见内核版本0.11的unistd.h文件的133行_syscall0函数)。

    这时进入内核根据此前写入eax的系统调用功能号 便会运行sys_fork系统调用。

    接着,sys_fork中首先会调用C函数find_empty_process产生一个新的进程,然后会调用copy_process将父进程的内容复制给子进程,

    但是子进程tss中的eax值赋值为0(这也是为什么子进程中返回0的原因),当赋值完成 后,copy_process会返回新进程(该子进程)的pid,

    这个值会被保存到eax中。这时子进程就产生了,此时子进程与父进程拥有相同的代码空 间,程序指针寄存器eip指向相同的下一条指令地址,

    当fork正常返回调用其的父进程后,因为eax中的值是新创建的子进程号,所以,fork()返回 子进程号,执行else(pid>0);

    当产生进程切换运行子进程时,首先会恢复子进程的运行环境即装入子进程的tss任务状态段,其中的 eax值(copy_process中置为0)也会被装入eax寄存器,

    所以,当子进程运行时,fork返回的是0执行if(pid==0)。

    http://blog.csdn.net/livingpark/article/details/4069049

    http://blog.chinaunix.net/space.php?uid=20753645&do=blog&id=1877915

    vfork为什么会段错误或者循环打印

    http://hi.baidu.com/_kouu/blog/item/3e92640e3b6393e4ab645784.html

  • 相关阅读:
    axios封装
    python 分析列表中的字典
    python 列表解析学习
    Java常用ORM框架
    Kafka 会不会丢消息?怎么处理的?
    Node.js学习笔记【八】
    Node.js学习笔记【七】
    Node.js学习笔记【六】
    Node.js学习笔记【五】
    Node.js学习笔记【四】
  • 原文地址:https://www.cnblogs.com/moonflow/p/2459041.html
Copyright © 2011-2022 走看看