代码之家  ›  专栏  ›  技术社区  ›  Jon Cox

Python fork exec问题,子进程输出和父进程到达同一位置

  •  0
  • Jon Cox  · 技术社区  · 15 年前

    请尝试以下代码: python fork.py python fork.py 1 看看它能做什么。

    #!/usr/bin/env python2
    
    import os
    import sys
    
    child_exit_status = 0
    if len(sys.argv) > 1:
        child_exit_status = int(sys.argv[1])
    
    pid = os.fork()
    if pid == 0:
        print "This is the child"
        if child_exit_status == 0:
            os.execl('/usr/bin/whoami')
        else:
            os._exit(child_exit_status)
    else:
        print "This is the parent"
        (child_pid, child_status) = os.wait()
        print "Our child %s exited with status %s" % (child_pid, child_status)
    

    问:为什么子进程可以执行“打印”操作,而它仍然被输出到与父进程相同的位置?

    2 回复  |  直到 15 年前
        1
  •  3
  •   bstpierre Edgar Aviles    15 年前

    在linux下,子进程从父进程继承(几乎)所有内容,包括文件描述符。在您的例子中,文件描述符1(stdout)和文件描述符2(stderr)与父级打开到同一个文件。

    有关详细信息,请参阅手册页 fork() .

    如果希望子级的输出转到其他地方,可以在子级中打开一个新文件。

        2
  •  0
  •   Ignacio Vazquez-Abrams    15 年前

    因为您没有更改子级的文件描述符1(标准输出)的目标。