2010-07-28 2 views
0

Попробуйте выполнить код ниже: python fork.py и с: python fork.py 1, чтобы увидеть, что он делает.Python fork-exec проблема, выход дочернего процесса идет в том же месте, что и родительский процесс.

#!/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) 

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

(Am, используя Python 2.6 на Ubuntu 10.04)

+0

Потому что это правило? Шутки в сторону. Причина в том, что так работает Linux. Каков ваш реальный вопрос? Как это изменить? –

ответ

3

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

Просмотреть страницу пользователя для fork().

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

+0

Спасибо, это было очень полезно! –

0

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

Смежные вопросы