2012-04-03 112 views
0

嗨我試圖在python中執行小代碼,它給操作系統錯誤。操作系統錯誤os.wait在python

>>> import os 
>>> def child(): 
...  pid = os.fork() 
...  if not pid: 
...    for i in range(5): 
...      print i 
...  return os.wait() 
... 
>>> child() 
0 
1 
2 
3 
4 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 6, in child 
OSError: [Errno 10] No child processes 

我不能弄清楚爲什麼它給OSError。我搜索了它,它被注意到python 2.6或之前的bug。我正在使用python2.7。

+0

你在運行這個什麼操作系統? – dekomote 2012-04-03 07:57:47

+0

嗨它是Ubuntu服務器版 – Netro 2012-04-03 09:08:28

回答

3

你錯過了別的。因此,你在子進程中調用os.wait()(誰沒有自己的孩子,因此錯誤)。

更正如下代碼:

import os 
def child(): 
    pid = os.fork() 
    if not pid: 
      for i in range(5): 
        print i 
    else: 
     return os.wait() 

child() 
+0

嗨,這個作品。但我無法理解錯誤原因。請你詳細說明一下嗎? – Netro 2012-04-03 09:09:39

+0

瞭解更多關於多進程編程。 (例如:http://alumni.cs.ucr.edu/~ysong/cs160/lab1/multiprocess.html,http://users.actcom.co.il/~choo/lupg/tutorials/multiprocess/ multi-process.html) 當您分叉時,會創建一個與父級相同的子進程。除了一個差別 - fork函數的返回值。孩子得到0,父母得到孩子的PID。但是,當任何過程結束時,它必須將其返回值傳遞給其父項。父進程可以使用'wait'函數讀取它。如果一個過程沒有任何孩子,那麼稱之爲等待是沒有意義的,從而給出錯誤。 – stanwise 2012-04-03 12:03:31