Python fork-exec问题,子进程输出与父进程相同

时间:2010-07-28 11:03:33

标签: python exec fork

请尝试使用以下代码:python fork.pypython 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)

问题:为什么子进程可以进行'打印',它仍然会输出到父进程的同一个地方?

(我在Ubuntu 10.04上使用Python 2.6)

2 个答案:

答案 0 :(得分:3)

在linux下,子进程继承(几乎)来自父进程的所有内容,包括文件描述符。在您的情况下,文件描述符1(stdout)和文件描述符2(stderr)对与父项相同的文件打开。

请参阅fork()的手册页。

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

答案 1 :(得分:0)

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