请尝试使用以下代码: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)
问题:为什么子进程可以进行'打印',它仍然会输出到父进程的同一个地方?
(我在Ubuntu 10.04上使用Python 2.6)
答案 0 :(得分:3)
在linux下,子进程继承(几乎)来自父进程的所有内容,包括文件描述符。在您的情况下,文件描述符1(stdout)和文件描述符2(stderr)对与父项相同的文件打开。
请参阅fork()的手册页。
如果您希望孩子的输出去其他地方,您可以在孩子中打开一个新文件。
答案 1 :(得分:0)
因为您没有更改子文件的文件描述符1,标准输出的目的地。