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变量

  • 相关阅读:
    20180209-json&pickle&shelve模块
    20180209-shutil模块
    20180209-sys模块
    20180209-os模块
    20180115-Xcode创建多个工程协同开发
    20180108-递归函数
    20180105-Python中dict的使用方法
    Python-编码这趟浑水
    20171218-编程语言的介绍
    20180119-01-RACSignal的基础
  • 原文地址:https://www.cnblogs.com/saolv/p/9127437.html
Copyright © 2011-2022 走看看