zoukankan      html  css  js  c++  java
  • 以python代码解释fork系统调用

    import os
    
    print('Process (%s) start...' % os.getpid())
    # Only works on Unix/Linux/Mac:
    pid = os.fork()
    print ("haha")
    if pid == 0:
        print('I am child process (%s) and my parent is %s.' % (os.getpid(), os.getppid()))
    else:
        print('I (%s) just created a child process (%s).' % (os.getpid(), pid))
    
    
    """
    haha
    haha
    Process (876) start...
    I (876) just created a child process (877).
    I am child process (877) and my parent is 876.
    """

    执行到os.fork()时,发起fork系统调用,操作系统复制父进程得到子进程。fork系统调用完毕,返回给父进程子进程的id号,返回给子进程0,然后父子进城开始执行。我们可以看到haha被打印了两次,更加说明了子进程是复制父进程得来的

    再举个例子,说明子金成是复制父进程:

    print("This is console module")
    
    from multiprocessing import Process 
    import os
    import time
    ppp=3 
    def run_proc(name): 
        print('Run child process %s (%s)...' % (name, os.getpid()),ppp) #观察这句的执行结果
    if __name__=='__main__': 
        print('Parent process %s.' % os.getpid()) 
        p = Process(target=run_proc, args=('test',)) 
        print('Child process will start.') 
        p.start()
        #p.join() 
        print('Child process end.')
    
    """
    Parent process 928.
    Process will start.
    Run child process test (929)...,3
    Process end.
    """

     子进程正常打印了ppp的变量,说明子金城不仅仅是复制了实际的执行函数run_proc,而是复制了父进程全部的代码,所以才能正常打印ppp变量

  • 相关阅读:
    2021/1/10周总结一
    java基础复习五
    java基础复习四
    构建之法读书笔记三
    javaweb学生教务系统
    java基础复习三
    关于eclipse项目错误的一些小经验总结
    Java基础复习二
    JavaDoc文档
    2017-2018-2 20179216 《网络攻防与实践》 第四周总结
  • 原文地址:https://www.cnblogs.com/saolv/p/9127437.html
Copyright © 2011-2022 走看看