2010-07-28 35 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在Ubuntu 10.04使用Python 2.6)

+0

因爲這是規則?認真。原因是因爲這是Linux的工作方式。你真正的問題是什麼?如何改變這一點? – 2010-07-28 11:05:30

回答

3

在linux下,子進程繼承(幾乎)包含文件描述符在內的所有內容。在你的情況下,文件描述符1(標準輸出)和文件描述符2(標準錯誤)打開到父文件相同的文件。

請參閱fork()的手冊頁。

如果您希望孩子的輸出到其他地方,您可以在孩子中打開一個或多個新文件。

+0

謝謝,這非常有幫助! – 2010-07-28 14:04:58

0

因爲你沒有改變文件描述符1,標準輸出的目的地,爲孩子。