Проблема Python fork-exec, вывод дочернего процесса идет в то же место, что и родительский процесс - PullRequest
0 голосов
/ 28 июля 2010

Попробуйте код ниже с: 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)

Вопрос: Как получается, что дочерний процесс может выполнять «печать», и он все еще выводитсяв том же месте, что и родительский процесс?

(использую Python 2.6 в Ubuntu 10.04)

Ответы [ 2 ]

3 голосов
/ 28 июля 2010

В linux дочерний процесс наследует (почти) все от родительского, включая файловые дескрипторы. В вашем случае файловый дескриптор 1 (stdout) и файловый дескриптор 2 (stderr) открыты для того же файла, что и родительский.

См. Справочную страницу для fork () .

Если вы хотите, чтобы выходные данные потомка переместились в другое место, вы можете открыть новый файл (ы) в дочернем элементе.

0 голосов
/ 28 июля 2010

Поскольку вы не изменили место назначения дескриптора файла 1, стандартного вывода, для дочернего элемента.

...