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

  • 相关阅读:
    如何闪开安装VS2013必须要有安装IE10的限制
    Java从键盘输入
    Java基本数据类型和关键字
    openssl windows编译 32位&64位
    eclipse代码提示配置
    手动启动Android模拟器
    Android编程中的实用快捷键
    pat1023. Have Fun with Numbers (20)
    pat1022. Digital Library (30)
    pat1020. Tree Traversals (25)
  • 原文地址:https://www.cnblogs.com/saolv/p/9127437.html
Copyright © 2011-2022 走看看