2012-04-03 17 views
0

こんにちは私はPythonで小さなコードを実行しようとしていますが、OSエラーを出しています。OSError in os.wait in 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のを与えている理由を把握することはできませんメートル。私はそれをgoogled、それはPython 2.6またはそれ以前のバグとして知られています。私はpython2.7を使用しています。

+0

あなたはこれをどうOS上で実行していますか? – dekomote

+0

こんにちはubuntu-server edition – Netro

答えて

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

+0

マルチプロセスプログラミングの詳細を読む。 (例:http://alumni.cs.ucr.edu/~ysong/cs160/lab1/multiprocess.html、http://users.actcom.co.il/~choo/lupg/tutorials/multi-process/ multi-process.html) フォークすると、親プロセスと同じ子プロセスが作成されます。単一の差分を除いて - fork関数の戻り値。子は0を取得し、親は子のPIDを取得します。しかし、プロセスが終了すると、その戻り値をその親に渡す必要があります。親プロセスは 'wait'関数を使ってそれを読むことができます。プロセスに子プロセスがない場合は、waitを呼び出してエラーが発生するのは無意味です。 – stanwise